WPF项目模板-选项卡控件
本文关键字:选项 控件 项目 WPF | 更新日期: 2023-09-27 18:06:30
我正在编写一个应用程序,其中我利用一个选项卡控件,它将从一个选项卡开始打开,但允许用户打开多个其他选项卡。
打开的每个选项卡都应该有一个树视图,当用户加载文件时,我使用数据绑定填充树视图。
我是WPF的新手,但我觉得好像有一种方法可以创建一个包含TabItems应该包含的每个元素的模板。如何使用模板做到这一点?现在我的选项卡项的WPF如下
<TabItem Header="Survey 1">
<TreeView Height="461" Name="treeView1" VerticalAlignment="Top"
Width="625" Margin="0,0,6,0" ItemTemplateSelector="{StaticResource TreeviewDataSelector}" />
</TabItem>
我想你需要这样的东西:
<Window x:Class="TestWpfApplication.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300">
<Window.Resources>
<DataTemplate x:Key="TabItemTemplate">
<TreeView Height="461" Name="treeView1" VerticalAlignment="Top"
Width="625" Margin="0,0,6,0" ItemTemplateSelector="{StaticResource TreeviewDataSelector}" />
</DataTemplate>
</Window.Resources>
<Grid>
<TabControl ItemsSource="{Binding ListThatPowersTheTabs}"
ItemTemplate="{StaticResource TabItemTemplate}">
</TabControl>
</Grid>
你基本上创建可重用的模板作为静态资源,你引用他们的键名
通常在这种情况下,我将TabControl.ItemsSource
绑定到ObservableCollect<ViewModelBase> OpenTabs
,因此我的ViewModel负责根据需要添加/删除新的选项卡。
然后,如果你想在每个选项卡中都有一些东西,那么覆盖TabControl.ItemTemplate
并使用下面的行来指定在哪里显示当前选择的TabItem
<ContentControl Content="{Binding }" />
如果你不需要在每个选项卡中设置一些东西,你不需要覆盖TabControl.ItemTemplate
-它将默认在选项卡中显示当前选择的ViewModelBase
。
我使用datatemplate来指定使用哪个视图
<DataTemplate TargetType="{x:Type local:TabAViewModel}">
<local:TabAView />
</DataTemplate>
<DataTemplate TargetType="{x:Type local:TabBViewModel}">
<local:TabBView />
</DataTemplate>
<DataTemplate TargetType="{x:Type local:TabCViewModel}">
<local:TabCView />
</DataTemplate>