我有一个网格,想要在不同条件下更改其内容。
所以我定义了一些资源:
<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的内容?感谢。
答案 0 :(得分: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;
根据您的需要,您可以使用DataTemplateSelector
来动态选择适当的模板。如果您需要内置多个StackPanel
,则可以使用ItemsControl
并使用每个单独的模板