WPF: Versteck ContextMenu, wenn Sie leer sind
Ich habe ein Kontext-Menü, das bekommt Menüpunkte durch databinding (ich bin mit dem MVVM-pattern):
<ContextMenu ItemsSource="{Binding Path=ContextMenuItems}" />
Diese funktioniert einwandfrei. Jedoch in den Fällen, wenn es keine Menüpunkte, um zu zeigen, ich will nicht das Kontextmenü zu zeigen, bis überhaupt. Gibt es eine Möglichkeit, dies zu erreichen? Irgendeine Art von XAML-Auslöser vielleicht?
Habe ich versucht, fangen die Veranstaltung Geöffnet och schließen Sie das Kontext-Menü, wenn es keine Kinder. Dies funktioniert aber im Kontextmenü immer noch blinkt durch...
InformationsquelleAutor haagel | 2010-11-16
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Vielleicht binden Sie Ihre Menüpunkte Sammlungen count-Eigenschaft und einen Konverter verwenden, um den Kontext-Menü-Sichtbarkeit.
Können Sie definieren eine implizite Stil:
Diese Arbeit sollte für alle Kontext-Menüs auf einmal.
Unten ist, wie können Sie eine Anwendung, die große Stil für das ausblenden von leeren Kontext-Menüs.
HasItems ist eine Abhängigkeitseigenschaft auf die ContextMenu selbst, so können Sie das Kontext-Menü die Sichtbarkeit basierend auf booleschen Wert.
Hier ist, wie es in einem resource dictionary:
Wenn Sie Tendlon die Lösung auf ein TreeView-Steuerelement (und wohl auch keine Liste geben Sie control) mit einem Kontext-Menü, es hat Probleme.
Könnten Sie versuchen, eine Bindung, die auf der Sichtbarkeit der Elemente.Rechnen Sie mit einem Wert Konverter - das sollte verhindern, dass Ihr Menü erscheinen 🙂
Ich kam mit einer Lösung für ein TreeView verwendet, die OnContextMenuOpening Rückruf. Es verhindert das problem, Alex G erwähnt. Wenn Sie reduzieren Sie das Menü mit einem XAML-style dann nicht angezeigt, wenn die contextmenu ist leer, aber es erscheint danach, wenn Sie mit der linken Maustaste auf ein anderes Element.
Den code sieht für die TreeViewItem will, öffnen Sie das Kontextmenü, und wenn es keine Elemente, es setzt die Handled-Eigenschaft des Ereignisses auf true.