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

Edw*_*uay 5 silverlight

我正在阅读2008年10月发布的Silverlight 2 Unleashed,其中有一个带有root canvas标签的示例:

<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"...
Run Code Online (Sandbox Code Playgroud)

但是,当我在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"...
Run Code Online (Sandbox Code Playgroud)

当然我可以通过用Canvas替换root标签来改变这一点,但是我还必须更改后面的代码以继承Canvas而不是UserControl,并且必须取出InitializeComponent方法.

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

LBu*_*ion 4

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

要点是,任何 XAML 元素都可以用作 XAML 文档的根。Visual Studio 通过创建 UserControl XAML 根并将其链接到代码隐藏中的 UserControl 类来执行的操作实际上是更通用方案的特殊情况。我同意这是读者大多数时候会遇到的问题,但我也相信表明事情可以有所不同的价值。此外,还必须表明,有时,没有 Code-Behind,即使没有 Code-Behind 类的“帮助”,XAML 也是一种具有多种功能的语言。

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

如果您有任何其他问题,请随时在这里发帖或给我发电子邮件。

干杯,劳伦特