TabItem的ContextMenu命令绑定失效问题

saybookcat 2018-04-10 12:41:32
实现如下:

<ControlTemplate x:Key="TabControlContentTemplate" TargetType="{x:Type TabControl}">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<ScrollViewer Grid.Row="0"
x:Name="TabControlScroller"
VerticalScrollBarVisibility="Disabled"
HorizontalScrollBarVisibility="Auto"
Style="{StaticResource TabHeaderScrollViewer}">
<TabPanel IsItemsHost="True" SnapsToDevicePixels="True" />
</ScrollViewer>
<Border Grid.Row="1" BorderBrush="{StaticResource DefaultBrush}" BorderThickness="1">
<ContentPresenter ContentSource="SelectedContent" />
</Border>
</Grid>
</ControlTemplate>


<Style TargetType="TabItem" x:Key="TabItemStyle">
<Setter Property="Margin" Value="0,3,0,0" />
<Setter Property="Height" Value="Auto" />
<Setter Property="MaxWidth" Value="300" />
<Setter Property="Padding" Value="5" />
<Setter Property="HorizontalAlignment" Value="Stretch" />
<Setter Property="VerticalAlignment" Value="Stretch" />
<Setter Property="HorizontalContentAlignment" Value="Stretch" />
<Setter Property="VerticalContentAlignment" Value="Stretch" />
<Setter Property="SnapsToDevicePixels" Value="True" />
<Setter Property="HeaderTemplate">
<Setter.Value>
<DataTemplate>
<Grid Focusable="False" VerticalAlignment="Center" >
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />

</Grid.ColumnDefinitions>
<Image Grid.Column="0"
Focusable="False"
Width="16" Height="16" Margin="3,0,3,0"
Source="{Binding TabImageSource}" />
<ContentPresenter
Focusable="False"
Grid.Column="1"
x:Name="ContentSite"
VerticalAlignment="Center"
HorizontalAlignment="Center"
ContentSource="Header"
Margin="0,3,0,3"
Content="{Binding TabName}" />

<Button x:Name="CloseButton"
Grid.Column="2"
VerticalAlignment="Center"
HorizontalAlignment="Center"
Margin="5,0,5,0"
Style="{StaticResource CloseButtonStyle}"
Visibility="Visible"
Command="{Binding DataContext.TabItemViewModel.TabItemCloseCmd,RelativeSource={RelativeSource AncestorType={x:Type TabControl}}}"
CommandParameter="{Binding}" />
</Grid>
</DataTemplate>
</Setter.Value>
</Setter>
<Setter Property="ContextMenu">
<Setter.Value>
<ContextMenu Margin="0,0,0.4,0">
<MenuItem Header="关闭"
Command="{Binding DataContext.TabItemViewModel.CloseTabCmd,RelativeSource={RelativeSource FindAncestor,AncestorType={x:Type ContextMenu}}}"

/>

<MenuItem Header="关闭所有页面"
Command="{Binding DataContext.TabItemViewModel.CloseAllTabCmd,RelativeSource={RelativeSource FindAncestor,AncestorType={x:Type ContextMenu}}}"
CommandParameter="{Binding Path=PlacementTarget.Parent, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ContextMenu}}}" />

<MenuItem Header="除此之外全部关闭"
Command="{Binding DataContext.TabItemViewModel.CloseOtherTabCmd,RelativeSource={RelativeSource AncestorType={x:Type ContextMenu}}}"
CommandParameter="{Binding Path=PlacementTarget.Parent, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ContextMenu}}}" />
</ContextMenu>
</Setter.Value>
</Setter>

<Setter Property="Content" Value="{Binding UserControl}" />



<TabControl
Name="tabControl"
ItemsSource="{Binding TabItemViewModel.TabItems}"
SelectedItem="{Binding TabItemViewModel.SelectedModel,Mode=TwoWay}"
ItemContainerStyle="{StaticResource TabItemStyle}"
Template="{StaticResource TabControlContentTemplate}">

</TabControl>


右键菜单的命令点击失效,无法寻找到TabItemViewModel中的CloseTabCmd等命令,如要如何binding才能生效?
...全文
586 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
exception92 2018-04-13
  • 打赏
  • 举报
回复
Command="{Binding DataContext.TabItemViewModel.CloseTabCmd,RelativeSource={RelativeSource FindAncestor,AncestorType={x:Type ContextMenu}}}" -》AncestorType 类型不应该是ContextMenu,因为它没有DataContext指定,应该是TabControl级别的

8,735

社区成员

发帖
与我相关
我的任务
社区描述
WPF/Silverlight相关讨论
社区管理员
  • WPF/Silverlight社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧