【问题标题】:control template in silverlightSilverlight 中的控制模板
【发布时间】:2009-08-02 17:51:37
【问题描述】:

作为 ASP.Net 开发人员,我熟悉将 Master Pages 作为网页模板。 Silverlight 中是否有与 ASP.Net 中的母版页等效的机制?

因为我不想重复自己创建类似的控件:

控制A

<UserControl>
  <Grid>
    <Button Click="ClickMe" />
    <Button Click="CancelMe" />
    <TextBlock />
    <StackPanel>
      <!-- content start here -->
      <Rectangle />
      <!-- content end here -->
    </StackPanel>
  <Grid>
</UserControl>

控制B

<UserControl>
  <Grid>
    <Button Click="ClickMe" />
    <Button Click="CancelMe" />
    <TextBlock />
    <StackPanel>
      <!-- content start here -->
      <Canvas />
      <!-- content end here -->
    </StackPanel>
  <Grid>
</UserControl>

【问题讨论】:

    标签: silverlight


    【解决方案1】:

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

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

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

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

    【讨论】:

      【解决方案2】:

      您可以将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>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-12-20
        • 2011-08-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-16
        • 1970-01-01
        相关资源
        最近更新 更多