【问题标题】:How to define a grid's content as a resource?如何将网格的内容定义为资源?
【发布时间】:2014-09-17 10:21:16
【问题描述】:

我有一个网格,想在不同的条件下改变它的内容。

所以我定义了一些资源:

<phone:PhoneApplicationPage.Resources>

    <StackPanel x:Key="MyStackPanel1">
        <!--Content-->
    </StackPanel>      

    <StackPanel x:Key="MyStackPanel2">
        <!--Content-->
    </StackPanel>

</phone:PhoneApplicationPage.Resources>

我有网格:

    <Grid Name="MyGrid">

    </Grid>

现在当我想在网格中使用这些资源时

 var myStackPanel = this.Resources["MyStackPanel1"] as StackPanel;
 MyGrid.Children.Add(myStackPanel);

我收到此错误:

元素已经是另一个元素的子元素。

如何在不同的条件下改变 MyGrid 的内容?谢谢。

【问题讨论】:

    标签: c# wpf xaml windows-phone-8 windows-phone


    【解决方案1】:

    一个好方法是使用Templates

    例子:

    <phone:PhoneApplicationPage.Resources>
    
      <ControlTemplate x:Key="Template1">
        <StackPanel >
            <!--Content-->
        </StackPanel>
      </ControlTemplate>  
    
      <ControlTemplate x:Key="Template2">
        <StackPanel >
            <!--Content-->
        </StackPanel>
      </ControlTemplate> 
    
    </phone:PhoneApplicationPage.Resources>
    

    并且不要将Grid 作为容器,而是使用普通的Control

    <Control x:Name="MyControl" />
    

    因此,您可以通过更改其模板轻松切换其内容:

    var myTemplate = this.Resources["Template1"] as ControlTemplate;
     MyControl.Template = myTemplate;
    

    根据您的需要,您可以使用DataTemplateSelectors 来动态选择合适的模板。如果您需要多个 StackPanel 内部,则可以使用 ItemsControl 并使用每个单独的模板

    【讨论】:

      猜你喜欢
      • 2012-05-11
      • 2012-12-23
      • 2022-11-12
      • 1970-01-01
      • 2015-10-20
      • 1970-01-01
      • 2020-08-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多