首页 > 解决方案 > 如何从各种模板动态生成网格

问题描述

我对 WPF 比较陌生,我正在尝试创建一个系统,您可以在其中单击一个按钮来添加一个新选项卡,该选项卡会生成相应的网格来显示内容。例如,当您打开一个新选项卡时,第一页将是“主页”,然后您可以在此新选项卡中选择导航到其他内容,例如“选项”。然后,您可以添加另一个选项卡并重复该过程等。IT 就像 Google Chrome 一样,每个选项卡代表另一种浏览器体验。

到目前为止,我的选项卡都在工作,但是我仍然坚持应该如何为每个选项卡生成网格。有人对我如何做到这一点有任何建议吗?

标签: c#wpf

解决方案


  • 创建具有属性的抽象TabData基类。Header string
  • 为您想要的每种类型的选项卡创建一个派生类TabData(例如 HomeData、OptionsData 等)
  • 创建一个具有Itemstype 属性的视图模型IEnumerable<TabData>
  • 绑定to的ItemsSource属性并为每个具体类型定义一个隐式:TabControlItemsDataTemplateTabData

    <TabControl ItemsSource="{Binding Items}">
        <TabControl.ItemTemplate>
            <DataTemplate>
                <TextBlock Text="{Binding Header}" />
            </DataTemplate>
        </TabControl.ItemTemplate>
        <TabControl.Resources>
            <DataTemplate DataType="{x:Type local:HomeData}">
                ...
            </DataTemplate>
            <DataTemplate DataType="{x:Type local:OptionsData}">
                ...
            </DataTemplate>
        </TabControl.Resources>
    </TabControl>
    

定义选项卡的DataTemplate外观并且可以包含一个DataGrid或任何其他元素。


推荐阅读