作为ASP.Net开发人员,我熟悉Master Pages作为网页模板。 Silverlight中是否有与ASP.Net中的Master Pages等效的机制?
因为我不想重复自己创建类似的控件,如:
ControlA
<UserControl>
<Grid>
<Button Click="ClickMe" />
<Button Click="CancelMe" />
<TextBlock />
<StackPanel>
<!-- content start here -->
<Rectangle />
<!-- content end here -->
</StackPanel>
<Grid>
</UserControl>
ControlB
<UserControl>
<Grid>
<Button Click="ClickMe" />
<Button Click="CancelMe" />
<TextBlock />
<StackPanel>
<!-- content start here -->
<Canvas />
<!-- content end here -->
</StackPanel>
<Grid>
</UserControl>
答案 0 :(得分:2)
没有等价物,因为该概念不适用于Silverlight - 就像它不适用于桌面应用程序一样。
Silverlight应用程序的可视外观是通过控件层次结构实现的。可以随时修改布局,更新将反映在下一个渲染过程中(实际上是对Windows窗体的改进)。
为了正确实现您的示例,您只需创建一个UserControl,其中包含ControlA和ControlB共有的所有内容,并根据需要修改其StackPanel的内容 - 可能在其构造函数中,或者可能响应其他人引发的事件控制。这完全取决于你何时以及多久经常这样做。
一旦掌握了它,您就会发现使用Silverlight比使用传统Web技术的任何组合更容易创建动态和可用的界面。
答案 1 :(得分:1)
您可以将ItemsControl
用于此特定类型的模板。 ItemsControl
是Control
的一种类型,可以包含多个项目,例如字符串,对象或其他元素。如下图所示转换您的XAML。请务必在代码隐藏中从ItemsControl
而不是UserControl
派生您的课程。
<ItemsControl>
<ItemsControl.Template>
<ControlTemplate TargetType="ItemsControl">
<Grid>
<Button Click="ClickMe"/>
<Button Click="CancelMe"/>
<TextBlock/>
<ItemsPresenter/>
</StackPanel>
</ControlTemplate>
</ItemsControl.Template>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
假设您的新班级名为MasterPageControl
。您可以像这样使用控件:
<local:MasterPageControl>
...
<Rectangle/>
<Canvas/>
...
</local:MasterPageControl>