Wpf 动态显示网格内容

Wpf 动态显示网格内容,wpf,layout,grid,itemscontrol,Wpf,Layout,Grid,Itemscontrol,我为我的应用程序开发了3种不同的布局(类似于我想你会称之为皮肤,但布局非常不同,不仅仅是颜色和字体的变化)。布局用于显示相同的数据,但格式完全不同。每个布局都是在自己的网格中构建的 我希望我的应用程序根据运行时可用的字符串值决定动态显示哪个布局 让父网格动态显示子网格的最佳方法是什么 我试图找到某种神奇的数据模板/数据绑定/模板方法,但似乎找不到最好的方法。或者,我应该看看显示这些不同布局的不同方法吗?像ItemsControl还是类似的 Ben我通常使用ContentControl和DataT

我为我的应用程序开发了3种不同的布局(类似于我想你会称之为皮肤,但布局非常不同,不仅仅是颜色和字体的变化)。布局用于显示相同的数据,但格式完全不同。每个布局都是在自己的网格中构建的

我希望我的应用程序根据运行时可用的字符串值决定动态显示哪个布局

让父网格动态显示子网格的最佳方法是什么

我试图找到某种神奇的数据模板/数据绑定/模板方法,但似乎找不到最好的方法。或者,我应该看看显示这些不同布局的不同方法吗?像ItemsControl还是类似的


Ben

我通常使用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>

我通常使用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>