隐藏基于数据触发器的上下文菜单

时间:2015-04-20 14:12:29

标签: wpf xaml

我在用户控件中有几个网格。我想基于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中的其他地方使用它。我错过了什么?

由于

3 个答案:

答案 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;
}

不是很漂亮,但它确实有效。