如何定义网格';的内容作为资源
本文关键字:资源 何定义 定义 网格 | 更新日期: 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
并使用每个单独的模板