如何定义网格';的内容作为资源

本文关键字:资源 何定义 定义 网格 | 更新日期: 2023-09-27 18:22:07

我有一个网格,希望在不同的条件下更改其内容。

所以我定义了一些资源:

<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的内容?谢谢

如何定义网格';的内容作为资源

一个很好的方法是使用Templates

示例:

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

使用普通的Control:而不是Grid作为容器

<Control x:Name="MyControl" />

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

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

根据您的需要,您可以使用DataTemplateSelector来动态选择适当的模板。如果您需要多个StackPanel,您只需使用一个ItemsControl并使用每个单独的模板