【问题标题】:Should the Silverlight root tag be UserControl or Canvas?Silverlight 根标记应该是 UserControl 还是 Canvas?
【发布时间】:2009-02-06 16:36:39
【问题描述】:

我正在阅读 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


    【解决方案1】:

    断章取义,在 XAML 文档中使用 Canvas 作为根可能看起来很奇怪。但是,在本书中,当我们在名为 SilverlightPad 的在线工具中演示第一个 XAML 示例时使用了它。在这种情况下,没有代码隐藏,只有 XAML,因此您不需要更改类文件中的任何内容(因为没有)。

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

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

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

    干杯, 洛朗

    【讨论】:

    • 嗨 Laurent,我在 DeveloperFusion 上收听了您的播客,所以我知道您是 Silverlight 的早期采用者,我认为 Canvas 标签可能是 Silverlight 1 的遗物,所以感谢您的反馈,我m 采用非传统方式,也可以通过 .hta 创意将您的桌面 Silverlight 保持下去
    【解决方案2】:

    我认为这本书可能做错了。实际上,书籍往往会这样做。

    通常,您的用户控件应该将 UserControl 作为其根。如果您恰好需要一个 Canvas 来为整个控件绘制坐标位置,请将 Canvas 作为 UserControl 的第一个子项。 [编辑:] 在您的第二个示例中,将 Grid 替换为 Canvas - 但同样,仅当您真的需要 Canvas 时!

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

    关键是你应该缩小你的范围。如果您从 Canvas 开始做任何事情,当您尝试处理控件的所有复杂定位时,您最终会感到痛苦。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-07-02
      • 2011-02-27
      • 2012-01-06
      • 2015-08-19
      • 1970-01-01
      • 2015-09-30
      • 1970-01-01
      相关资源
      最近更新 更多