KrisW
KrisW

Reputation: 165

Hiding context menu based on data trigger

I have a couple of grids in a user control. I want to hide the context menu in a grid based on a property in the DataContext. I have this code:

   <Style  TargetType="{x:Type ContextMenu}">
        <Style.Triggers>
            <DataTrigger Binding="{Binding IsLockedNorthGrid}" Value="False">
                <Setter Property="Visibility" Value="Collapsed" />
            </DataTrigger>
        </Style.Triggers>
    </Style>

I know the IsLockedNorthGrid property works since I'm using it somewhere else in xaml. What am I missing?

Thanks

Upvotes: 1

Views: 1784

Answers (3)

KrisW
KrisW

Reputation: 165

I was able to solve my problem like so:

<XamDataGrid ContextMenuOpeninig="OnContextMenuOpening">
<XamDataGrid.Resources>   
<ContextMenu x:Key="GridContextMenu">...</ContextMenu> </XamDataGrid.Resources> 
<XamDataGrid>

Code behind:

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

Not that pretty but it works.

Upvotes: 0

Arun Selva Kumar
Arun Selva Kumar

Reputation: 2732

If you are using Style.Triggers to change the Visibility, be sure you are not setting Visibility to Context Menu inline. Since, inline property has higher priority over the style.

Upvotes: 1

Ben
Ben

Reputation: 935

Check if the Visibility is set to a specific value (setting it in a specific element and triggering it won´t work). Also try

<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>

Upvotes: 0

Related Questions