根据其他菜单项设置WPF中上下文菜单项的可见性

时间:2016-07-18 20:53:20

标签: wpf contextmenu collapse expand

我有一个带有分层数据的树视图控件。它有一个上下文菜单,有四个选项:展开,全部展开,折叠,全部折叠。我目前正在使用以下类来显示/隐藏上下文菜单项:

Public Class clsTreeContextMenuVisibilityConverter
Implements IValueConverter

Public Function Convert(InValue As Object, InTargetType As Type, InParameter As Object, InCulture As Globalization.CultureInfo) As Object Implements IValueConverter.Convert


    Dim node As TreeNode = Nothing

    If InValue Is Nothing Then
        Return Binding.DoNothing
    End If

    node = DirectCast(InValue, TreeNode)

    If InValue.[GetType]() <> GetType([Boolean]) Then
        If node.HasChildren AndAlso node.ParentNode Is Nothing Then 
            If node.IsExpanded Then
                Return Visibility.Collapsed
            End If              
            Return Visibility.Visible
        End If
    End If

    Return Binding.DoNothing

End Function

Public Function ConvertBack(InValue As Object, InTargetType As Type, InParameter As Object, InCulture As Globalization.CultureInfo) As Object Implements IValueConverter.ConvertBack
    Throw New NotImplementedException()
End Function

结束班

XAML:

<Style  x:Key="ExpandMenuItemStyle"
    TargetType="MenuItem">
    <Setter Property="FontWeight" Value="Bold" />
    <Setter Property="Visibility" Value="{Binding Converter={StaticResource VisConverter}}" />
</Style>

 <MenuItem Header="Expand" Style="{StaticResource ExpandMenuItemStyle}" />

VisConverter是x:转换器类的键。我的问题是,如果一个Node被扩展,我应该看到Collapse,反之亦然。此外,如果它是根父级节点,那么我应该看到全部展开。那么我是否必须为所有四种情况编写单独的转换器,或者是否有智能的方法来执行此操作?

如果需要更多信息,请与我们联系。

1 个答案:

答案 0 :(得分:1)

您可能需要两个转换器或两对转换器。一个用于扩展状态,另一个用于返回节点是父节点还是子节点。如果您只使用两个转换器,则需要一个参数来确定转换器是应该返回Visibility.Visible还是Visibility.Collapsed

使用四个转换器,您将不需要参数。