我有一个带有分层数据的树视图控件。它有一个上下文菜单,有四个选项:展开,全部展开,折叠,全部折叠。我目前正在使用以下类来显示/隐藏上下文菜单项:
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,反之亦然。此外,如果它是根父级节点,那么我应该看到全部展开。那么我是否必须为所有四种情况编写单独的转换器,或者是否有智能的方法来执行此操作?
如果需要更多信息,请与我们联系。
答案 0 :(得分:1)
您可能需要两个转换器或两对转换器。一个用于扩展状态,另一个用于返回节点是父节点还是子节点。如果您只使用两个转换器,则需要一个参数来确定转换器是应该返回Visibility.Visible
还是Visibility.Collapsed
。
使用四个转换器,您将不需要参数。