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

时间:2009-02-06 16:36:40

标签: silverlight

我正在阅读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替换root标签来改变它,但是我还必须改变后面的代码来继承Canvas而不是UserControl,并且必须取出InitializeComponent方法。

  • 是否正在使用Canvas标记作为根标准,或者是否正在创建另一种创建Silverlight应用程序的方法?
  • 使用Canvas而不是UserControl作为根元素有什么好处?
  • 为什么第一个示例的书会以不同于Visual Studio默认情况下的方式创建silverlight应用程序?
  • 是否有办法在Visual Studio中默认生成一个canvas标记作为根标记?

2 个答案:

答案 0 :(得分:4)

脱离上下文,使用Canvas作为XAML文档中的根可能看起来很奇怪。然而,在本书中,当我们在名为SilverlightPad的在线工具中演示第一批XAML样本时,会使用此方法。在这种情况下,没有代码,只有XAML,因此您不需要更改类文件中的任何内容(因为没有)。

关键是,任何XAML元素都可以用作XAML文档的根。 Visual Studio通过创建UserControl XAML根目录并将其链接到代码后面的UserControl类来实现的是更通用的方案的特殊情况。我同意这是读者在大多数时间面临的问题,但我也相信表明事情会有所不同的价值。此外,还有一点很重要,有时候,没有代码,XAML是一种具有多种功能的语言,即使没有代码背后的代码的“帮助”。

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

如果您有任何其他问题,请随时发布或发送电子邮件给我。

干杯, 劳伦

答案 1 :(得分:0)

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

通常,您的用户控件应将UserControl作为其根目录。如果您恰好需要Canvas进行整个控件的坐标位置绘制,请将Canvas作为UserControl的第一个子节点。 [编辑:]在你的第二个例子中,用画布替换网格 - 但是,只有当你真的需要Canvas时才能使用它!

Canvas是一个非常窄范围的面板;它明确用于坐标位置绘制,不应用于除此之外的任何。如果您正在进行任何类型的输入控件,请使用Grids,DockPanels和/或StackPanels的组合。甚至可能在你的TextBoxes附近为画布提供漂亮的小动画。 :)

重点是你应该缩小你的范围。如果你从任何东西开始使用Canvas,那么当你试图处理控件的所有复杂定位时,你最终会感到痛苦。