Silverlight根标记应该是UserControl还是Canvas?

问题描述 投票:5回答:2

我正在阅读于2008年10月发布的Silverlight 2 Unleashed,其中包含带有根画布标签的示例:

<Canvas xmlns="http://schemas.microsoft.com/client/2007"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Background="Red"
    Width="500"
    Height="300">
        <Ellipse Width="400"...

但是,当我在VS2008中创建新的Silverlight应用程序时,却获得了UserControl根标记:

<UserControl x:Class="TestFirst.Page"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Width="400" Height="300">
    <Grid x:Name="LayoutRoot" Background="White"...

当然,我可以通过用Canvas替换根标签来更改此设置,但是我还必须更改后面的代码以从Canvas继承而不是从UserControl继承,并且必须删除InitializeComponent方法。

  • 是使用Canvas标记作为根标准,还是这本书正在探讨创建Silverlight应用程序的替代方法?
  • 使用Canvas代替UserControl作为根元素有什么好处?
  • 为什么本书的第一个示例将以不同于Visual Studio默认设置的方式创建Silverlight应用程序?
  • 是否有一种方法可以在Visual Studio中将画布标签默认生成为根标签?
silverlight
2个回答
4
投票

脱离上下文,使用Canvas作为XAML文档的根目录可能看起来很奇怪。但是,在本书中,当我们在名为SilverlightPad的在线工具中演示第一个XAML示例时,将使用此方法。在这种情况下,没有Code-Behind,只有XAML,因此您无需更改类文件中的任何内容(因为没有更改)。

关键是,任何XAML元素都可以用作XAML文档的根。通过创建UserControl XAML根目录并将其链接到Code-Behind中的UserControl类,Visual Studio所做的实际上是更通用方案的特例。我同意这是大多数时候读者会遇到的问题,但我也相信表明事物可以有所不同的价值。此外,重要的是要表明有时没有Code-Behind,而且XAML是即使没有Code-Behind类的“帮助”也具有多种功能的语言。

Silverlight 2 Unleashed使用从几乎零开始的渐进曲线,并具有(相当陡峭的)学习曲线。如果继续阅读,您会发现我们在本书的稍后部分开始使用Visual Studio,并且情况将会变得更加熟悉。但是,您将看到可以将其他元素用作根,并且我认为这具有教育意义。

[如果还有其他问题,请随时在此处发邮件或给我发送电子邮件。

干杯,洛朗


0
投票

我认为这本书可能做错了什么。实际上,书籍倾向于这样做。

通常,您的用户控件应以UserControl为根。如果您只是需要使用Canvas来绘制整个控件的坐标位置图,请将Canvas作为UserControl的第一个子代。 [编辑:]在第二个示例中,用Canvas替换Grid -但同样,仅在确实需要Canvas的情况下!

画布是一个非常狭窄的面板;它明确用于坐标位置绘图,除此以外,不应该用于anything。如果您要进行任何类型的输入控件,请结合使用Grids,DockPanels和/或StackPanels。甚至可以使用“画布”在TextBoxes附近制作漂亮的小动画。 :)

重点是您应该缩小范围。如果从Canvas开始,那么当您尝试处理控件的所有复杂位置时,您都会痛苦不堪。

© www.soinside.com 2019 - 2024. All rights reserved.