WPF,TreeViewItem,如何根据依赖项 属性 不显示 contextMenu?

WPF, TreeViewItem, how to not show contextMenu according to dependency property?

我有一个使用以下样式的树视图:

<HierarchicalDataTemplate x:Key="itemTemplate" DataType="{x:Type AttCatalog:AttachmentCatalogModel}" ItemsSource="{Binding Children}">
        <TextBlock Text="{Binding Name}" Tag="{Binding Guid}">
            <TextBlock.ContextMenu>
                <ContextMenu>
                    <MenuItem Header="New Item"/>
                    <MenuItem Header="Move to..." />
                    <MenuItem Header="Delete" />
                </ContextMenu>
            </TextBlock.ContextMenu>
        </TextBlock>
</HierarchicalDataTemplate>

<TreeView x:Name="tree" HorizontalAlignment="Left" Width="216" BorderThickness="0,0,1,0" Background="#FFFBFBFB" IsEnabled="{Binding IsEnabled}" ItemsSource="{Binding Catalogs}" ItemTemplate="{StaticResource itemTemplate}" TreeViewItem.Expanded="OnExpandItemHandler" Margin="0,0,0,241" SelectedItemChanged="tree_SelectedItemChanged">

您可以看到 TextBlock 标签绑定了一个 Guid 属性,我的问题是,当这个 Guid 为空 (00000-00000000-00000),不显示上下文菜单时如何做到这一点?

在上下文菜单中,将可见性绑定到 Guid,并用转换器处理它 =>

<ContextMenu Visibility="{Binding Element=Guid, 
                          Converter={StaticResource GuidToVisibilityConverter}}">
      <MenuItem Header="New Item"/>
      <MenuItem Header="Move to..." />
      <MenuItem Header="Delete" />
</ContextMenu>

在您的转换器中,您可以按照自己的方式处理 Guid 值,即 return Visibility.Visible 或 Visibility.Hidden,具体取决于值。

您可以找到有关转换器的更多信息here.

希望对您有所帮助!