Pro this page verwendet DropDownButton ein ContextMenu, um die ItemsSource anzuzeigen. Wie können wir wissen, worauf der Benutzer klickt? Das Click-Ereignis auf der Schaltfläche gilt nicht für das Menü, sondern für die Schaltfläche selbst. Ich sehe keine anderen Ereignisse darauf.Wissen, was in einem DropDownButton geklickt wird
Antwort
Erstellen Sie eine zum ContextMenu/DropDownButton (je nachdem, was Sie bevorzugen). Wenn Sie das Dropdown-Menü aufgerufen haben, rufen Sie das Kontextmenü auf, das angezeigt wird, verbinden Sie dann die Click
-Ereignisse und drücken Sie den Wert zurück auf die Eigenschaft.
können Sie überschreiben die Elementvorlage für die Steuerung und kann einen Handler in der es wie folgt hinzu:
<controls:DropDownButton Content="Select me" x:Name="selectMeDropDownButton">
<controls:DropDownButton.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding}" MouseDown="selectMeDropDownButton_TextBlock_MouseDown" />
</DataTemplate>
</controls:DropDownButton.ItemTemplate>
</controls:DropDownButton>
und den Event-Handler in implementieren Code-Behind-Datei wie folgt:
void selectMeDropDownButton_TextBlock_MouseDown(object sender, MouseButtonEventArgs e)
{
if (e.ChangedButton == MouseButton.Left && this.selectMeDropDownButton.IsExpanded)
{
var value = ((TextBlock)e.Source).DataContext;
// Do something meaningful with the value, it's an item from ItemsSource
}
}
Die Überprüfung für DropDownButton.IsExpanded
ist erforderlich, da das gleiche ItemTemplate
auf die Content
auf der Schaltfläche selbst angewendet wird. Natürlich können Sie TextBlock durch beliebige Control
/UIElement
ersetzen.
IMO ist es besser '' MenuItem Click = "..." /> 'anstelle von'
Ich stieß auf diese Frage auf der Suche nach der gleichen Antwort. Ich habe nie wirklich etwas online gefunden, aber ich habe diese Lösung selbst entdeckt. Vielleicht wird es jemandem in der Zukunft helfen.
Wie bereits erwähnt, verwendet die DropDownButton
eine ContextMenu
, um ihre ItemsSource
anzuzeigen. Was ich eigentlich suchte, war ein "menüähnlicher" Drop-Down von einem Button. Angenommen, Sie haben eine DropDownButton
, die "Add" sagt. Vielleicht möchten Sie 2 Optionen wie "Add New" und "Add Existing". Also das ist was ich getan habe ...
Zuerst habe ich ein Objekt gemacht, um den Header/Inhalt und den Befehl zu halten.
public class TitledCommand
{
public String Title { get; set; }
public ICommand Command { get; set; }
}
Theoretisch würden Sie eine Liste dieser auf die ItemsSource
des DropDownButton
zu binden.
public List<TitledCommand> TitledCommmands { get; private set; }
Jetzt Stil, den wir gerade das Einzelteil Container für die DropDownButton
so nimmt es den Header und Befehl von unseren Objekten im ItemsSource
.
Fügen MahApps:
xmlns:metroControls="http://metro.mahapps.com/winfx/xaml/controls"
Und hier ist der Stil ...
<metroControls:DropDownButton Content="Add" ItemsSource="{Binding Path=TitledCommmands}">
<metroControls:DropDownButton.ItemContainerStyle>
<Style TargetType="MenuItem">
<Setter Property="Header" Value="{Binding Path=Title}"/>
<Setter Property="Command" Value="{Binding Path=Command}"/>
</Style>
</metroControls:DropDownButton.ItemContainerStyle>
</metroControls:DropDownButton>
In meinem Fall mit '
Dieser sollte akzeptiert werden Antworten. –
Schön gemacht! thx – petric
Verwenden SplitButton statt Dropdownbutton. Der erste hat SelectionChanged-Ereignis.
Ja, aber sie haben nicht das gleiche Gefühl beim Anklicken ... – petric
- 1. Wie Sie wissen, wenn eine Schaltfläche geklickt wird in C#
- 2. Wie kann ich wissen, wann auf einen Button in einem Flex DataGrid itemRenderer geklickt wird?
- 3. So stylen Sie dropDownButton?
- 4. Wie kann man wissen, was rückrolliert wird?
- 5. Gibt es eine Möglichkeit zu erhalten, was in einem beliebigen Fenster geklickt wird?
- 6. Ändern WPF Toolkit DropDownButton style
- 7. Wie ein Dropdownbutton in Java codieren
- 8. Text markieren, wenn geklickt wird
- 9. Randloser NSButton wird grau, wenn geklickt wird
- 10. Wissen, wenn ein Hyperlink in einem Textfeld angeklickt wird?
- 11. Code zu wissen, was?
- 12. Was passiert, wenn auf die Schaltfläche zum Senden geklickt wird
- 13. Zellinformationen, wenn auf die Zelle geklickt wird
- 14. Wie kann man wissen, welches Element geklickt wurde
- 15. MahApps statische und Dropdownbutton Caliburn.Micro Ereignisbindung
- 16. Wissen, welcher java.exe-Prozess auf einem Windows-Rechner beendet wird
- 17. Erweiterte Zelle wird nicht geklickt
- 18. NSPopUpButtonCell in benutzerdefinierten Zelle wird nicht angezeigt, wenn geklickt wird
- 19. Zeige Position, wo geklickt wird
- 20. Weg zu wissen, ob Benutzer auf einem Javascript onbeforeunload Dialog auf Abbrechen geklickt hat?
- 21. Code ausführen, wenn auf TextBox geklickt oder geklickt wird?
- 22. Schaltfläche wird auf falsche Seite umgeleitet, wenn geklickt wird [PHP]
- 23. Verhindern, dass JOptionPane "geschlossen" wird, indem irgendwo anders geklickt wird
- 24. Was wird in einem Kontextwechsel gespeichert?
- 25. Multiple PlaceAutoCompleteFragment wird geöffnet, wenn sehr schnell darauf geklickt wird
- 26. Skript umschalten, wenn anderes div geklickt wird
- 27. Entfernen Sie ein div nach einem Element in einem iframe innerhalb dieser div geklickt wird
- 28. SVG Rhombus Animation erweitern, wenn geklickt wird
- 29. Ermitteln, welche ChartArea doppelt geklickt wird
- 30. JOptionPane.showMessageDialog warte bis OK geklickt wird?
Überprüfen Sie diese Ereignisse: 'DropDownOpened/DropDownClosed',' ContextMenuOpening/ContextMenuClosing'. –
Verwenden Sie keine Ereignisse in WPF. Es besteht die Möglichkeit, dass das Steuerelement eine 'SelectedItem' -Eigenschaft hat, oder dass Sie' Command's jedem Element zuweisen können, wie Sie es in einem normalen 'Menu' tun würden. –
@HighCore: Der DropDownButton ist, Zitat: 'Dieses Steuerelement fast das gleiche wie SplitButton mit wenigen Unterschieden: Es hat keine SelectedItem und SelectedIndex Eigenschaften und hat auch kein SelectionChanged-Ereignis. –