Häufig möchte man zur Gruppierung in der Toolbar einen Dropdown-Button anzeigen, auf dessen Klick sich ein Menü mit weiteren Einträgen öffnet. WPF bietet dafür keine vorgefertigte Lösung, die kann man sich jedoch recht leicht selber bauen.
Das Prinzip
Das Prinzip ist einfach: Man legt für den Button ein Kontextmenü fest und zeigt dieses auch dann an, wenn der Button normal angeklickt wird.
Für diesen Zweck verwenden wir einen ToggleButton, damit der Button als aktiv angezeigt wird, solange das Menü angezeigt wird. Das Kontextmenü des Buttons missbrauchen wir als das Menü, das beim Klick angezeigt wird. Beim Check des Buttons (also beim ersten Klick) öffnen wir das Kontextmenü und platzieren es unter den Button, sobald sich das Kontextmenü schließt, setzen wir den Button wieder nicht aktiv.
Die Umsetzung
Die Ereignishandler im Code-Behind sind vom sender abhängig und können daher auch für mehrere Dropdown-Buttons verwendet werden. Der MouseRightButtonUp-Ereignishandler dient nur dazu, damit das Kontextmenü nicht bei Rechtsklick auf den Button angezeigt wird. Wen das nicht stört, der kann das auch weglassen. Einziger Nachteil an dieser Methode ist, dass man kein eigenes Kontextmenü für den Rechtsklick setzen kann.
Geht auch als Klasse
Das ganze kann man sich natürlich auch in eigene Klasse packen und dann mit einer eigenen Property für das Dropdown-Menü versehen. Damit ist das Problem mit dem Kontextmenü behoben und der XAML-Code wird auch einfacher.