Ich habe ein Strukturansichts-Steuerelement mit hierarchischen Daten. Es verfügt über ein Kontextmenü mit vier Optionen: Erweitern, Alle erweitern, Reduzieren, Alle reduzieren. Ich bin derzeit die folgende Klasse zu zeigen,/die Kontextmenüpunkte verbergen:Sichtbarkeit von Kontextmenüeinträgen in WPF abhängig von anderen Menüoptionen festlegen
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
End Class
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 ist x: Key des Wandlers Klasse. Meine Frage ist, wenn ein Node erweitert wird, sollte ich Collapse sehen und umgekehrt. Wenn es sich um einen Stammelternknoten handelt, sollte ich auch Expand All sehen. Muss ich also für alle vier Fälle separate Konverter schreiben oder gibt es dafür einen intelligenten Weg?
Bitte lassen Sie mich wissen, wenn weitere Informationen benötigt werden.
Ich habe nicht genau zwei Konverter verwendet, aber Ihre Antwort gab mir eine Idee, den Menüpunkt als ConverterParameter zu übergeben, dann konnte ich alle vier Fälle in nur einer Konverterklasse behandeln. – Veda