我在用户控件中有几个网格。我想基于DataContext中的属性隐藏网格中的上下文菜单。我有这段代码:
<Style TargetType="{x:Type ContextMenu}">
<Style.Triggers>
<DataTrigger Binding="{Binding IsLockedNorthGrid}" Value="False">
<Setter Property="Visibility" Value="Collapsed" />
</DataTrigger>
</Style.Triggers>
</Style>
我知道IsLockedNorthGrid属性有效,因为我在xaml中的其他地方使用它。我错过了什么?
由于
答案 0 :(得分:1)
如果您使用Style.Triggers更改“可见性”,请确保未将“可见性”设置为内联上下文菜单。因为,内联属性比样式具有更高的优先级。
答案 1 :(得分:0)
检查可见性是否设置为特定值(在特定元素中设置它并触发它不起作用)。也试试
<Style TargetType="{x:Type ContextMenu}">
<Setter Property="Visibility" Value="Visible" />
<Style.Triggers>
<DataTrigger Binding="{Binding IsLockedNorthGrid}" Value="False">
<Setter Property="Visibility" Value="Collapsed" />
</DataTrigger>
</Style.Triggers>
</Style>
答案 2 :(得分:0)
我能够像这样解决我的问题:
<XamDataGrid ContextMenuOpeninig="OnContextMenuOpening">
<XamDataGrid.Resources>
<ContextMenu x:Key="GridContextMenu">...</ContextMenu> </XamDataGrid.Resources>
<XamDataGrid>
代码背后:
private void OnContextMenuOpening(object sender, ContextMenuEventArgs e)
{
var logViewModel = (LogViewModelBase)DataContext;
var grid = sender as XamDataGrid;
var menu = grid.Resources["GridContextMenu"] as ContextMenu;
menu.Visibility = !logViewModel.IsLockedNorthGrid ? Visibility.Hidden : Visibility.Visible;
}
不是很漂亮,但它确实有效。