【问题标题】:Dynamically Display Grid Content动态显示网格内容
【发布时间】:2011-09-28 15:52:46
【问题描述】:
我为我的应用程序开发了 3 种不同的布局(类似于我猜你所说的皮肤,但布局大不相同,不仅仅是颜色和字体的变化)。布局用于显示相同的数据,但格式完全不同。这些布局中的每一个都是在自己的网格中构建的。
我希望我的应用程序根据运行时可用的字符串值来决定动态显示哪个布局。
让父网格动态显示子网格的最佳方法是什么?
我正在尝试找到某种神奇的 DataTemplate / DataBinding / Templating 方法,但似乎找不到最好的方法。或者,我应该寻找一种不同的方法来显示这些不同的布局吗?像 ItemsControl 或类似的?
本
【问题讨论】:
标签:
wpf
layout
grid
itemscontrol
【解决方案1】:
我通常使用 ContentControl 和 DataTrigger 来确定要使用的 ContentTemplate。
例如,
<ContentControl Content="{Binding MyViewModel}">
<ContentControl.Resources>
<DataTemplate x:Key="DefaultTemplate">
<TextBlock Text="DefaultTemplate" />
</DataTemplate>
<DataTemplate x:Key="TemplateA">
<TextBlock Text="Template A" />
</DataTemplate>
<DataTemplate x:Key="TemplateB">
<TextBlock Text="Template B" />
</DataTemplate>
</ContentControl.Resources>
<ContentControl.Style>
<Style TargetType="{x:Type ContentControl}">
<Setter Property="ContentTemplate" Value="{StaticResource DefaultTemplate}" />
<Style.Triggers>
<DataTrigger Binding="{Binding SelectedView}" Value="ViewA">
<Setter Property="ContentTemplate" Value="{StaticResource TemplateA}" />
</DataTrigger>
<DataTrigger Binding="{Binding SelectedView}" Value="ViewB">
<Setter Property="ContentTemplate" Value="{StaticResource TemplateB}" />
</DataTrigger>
</Style.Triggers>
</Style>
</ContentControl.Style>
</ContentControl>