我正在阅读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方法。
答案 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,那么当你试图处理控件的所有复杂定位时,你最终会感到痛苦。