我在TabControl
内有一些工作空间。每个工作空间都有一些绑定到某些ApplicationCommands
的命令绑定,如
使用这些ApplicationCommands
<Menu>
<MenuItem Command="ApplicationCommands.New"/>
<MenuItem Command="ApplicationCommands.Save"/>
<MenuItem Command="ApplicationCommands.Close"/>
</Menu>
手动连接TabControl
时,可以非常轻松地使用此命令
<TabControl>
<TabControl.Resources>
<Style TargetType="TabItem">
<Setter Property="HeaderTemplate" Value="{StaticResource ClosableTabItemTemplate}"/>
</Style>
</TabControl.Resources>
<TabItem DataContext="{Binding Foo}"
Header="{Binding}"
Content="{Binding}"
local:AttachedProperties.RegisterCommandBindings="{Binding Path=CommandBindings}"/>
<TabItem DataContext="{Binding Bar}"
Header="{Binding}"
Content="{Binding}"
local:AttachedProperties.RegisterCommandBindings="{Binding Path=CommandBindings}"/>
</TabControl>
当我只选择TabItem
时,我可以使用菜单执行命令。
但是工作空间不是静态的,所以我不得不绑定到一组工作空间。现在仅仅选择TabItem
是不够的,我还必须激活内容,使用菜单中的命令(并不令人惊讶,因为TabItem
处于活动状态而没有任何命令绑定)
<TabControl ItemsSource="{Binding Path=Workspaces}">
<TabControl.Resources>
<Style TargetType="TabItem">
<Setter Property="HeaderTemplate" Value="{StaticResource ClosableTabItemTemplate}"/>
</Style>
</TabControl.Resources>
</TabControl>
这里是TabItem
<DataTemplate x:Key="ClosableTabItemTemplate">
<DockPanel LastChildFill="True">
<Button Content="X" DockPanel.Dock="Right" Command="{Binding Path=CloseCommand}"/>
<TextBlock Text="{Binding Path=DisplayName}"/>
</DockPanel>
</DataTemplate>
如何将CommandBindings设置为动态创建的TabItem
,或者如何让TabItem
本身使用我的AttachedProperties.RegisterCommandBindings
?
更新
作为一种解决方法(也许这是唯一可能的解决方案)我将命令绑定到TabControl
本身
<TabControl ItemsSource="{Binding Path=Workspaces}"
local:AttachedProperties.RegisterCommandBindings="{Binding RelativeSource={RelativeSource Self},Path=SelectedItem.CommandBindings}">
<TabControl.Resources>
<Style TargetType="TabItem">
<Setter Property="HeaderTemplate" Value="{StaticResource ClosableTabItemTemplate}"/>
</Style>
</TabControl.Resources>
</TabControl>
答案 0 :(得分:3)
您是否尝试设置项容器的附加属性?:
<TabControl ItemsSource="{Binding Path=Workspaces}">
<TabControl.ItemContainerStyle>
<Style TargetType="TabItem">
<Setter Property="local:AttachedProperties.RegisterCommandBindings" Value="{Binding RelativeSource={RelativeSource Self}, Path=CommandBindings}" />
<Setter Property="HeaderTemplate" Value="{StaticResource ClosableTabItemTemplate}"/>
</Style>
</TabControl.ItemContainerStyle>
</TabControl>