silverlight中的控制模板

时间:2009-08-02 17:51:37

标签: silverlight

作为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>

2 个答案:

答案 0 :(得分:2)

没有等价物,因为该概念不适用于Silverlight - 就像它不适用于桌面应用程序一样。

Silverlight应用程序的可视外观是通过控件层次结构实现的。可以随时修改布局,更新将反映在下一个渲染过程中(实际上是对Windows窗体的改进)。

为了正确实现您的示例,您只需创建一个UserControl,其中包含ControlA和ControlB共有的所有内容,并根据需要修改其StackPanel的内容 - 可能在其构造函数中,或者可能响应其他人引发的事件控制。这完全取决于你何时以及多久经常这样做。

一旦掌握了它,您就会发现使用Silverlight比使用传统Web技术的任何组合更容易创建动态和可用的界面。

答案 1 :(得分:1)

您可以将ItemsControl用于此特定类型的模板。 ItemsControlControl的一种类型,可以包含多个项目,例如字符串,对象或其他元素。如下图所示转换您的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>