In WPF-Anwendung gibt es eine Grid
mit einer Anzahl von Objekten (sie sind von einem benutzerdefinierten Steuerelement abgeleitet). Ich möchte einige Aktionen auf jedem von ihnen Kontextmenü ausführen:Wie verweist man mit der rechten Maustaste auf das Objekt im WPF-Kontextmenü? Click event handler?
<Grid.ContextMenu>
<ContextMenu>
<MenuItem Name="EditStatusCm" Header="Change status" Click="EditStatusCm_Click"/>
</ContextMenu>
</Grid.ContextMenu>
Aber in der Event-Handler kann ich nicht wissen lassen, welche der Objekte war Rechtsklick:
private void EditStatusCm_Click(object sender, RoutedEventArgs e)
{
MyCustControl SCurrent = new MyCustControl();
MenuItem menu = sender as MenuItem;
SCurrent = menu.DataContext as MyCustControl; // here I get a run-time error
SCurrent.Status = MyCustControl.Status.Sixth;
}
Auf dieser Kommentarzeile Debugger sagt: Objektverweis nicht auf eine Instanz eines Objekts festgelegt.
Bitte helfen, was ist falsch in meinem Code?
Edited (hinzugefügt):
Ich habe versucht, das gleiche zu tun, Befehl Ansatz:
ich mit RoutedUICommand Requery
DataCommands
Klasse deklariert und verwendet dann Window.CommandBindings
<Window.CommandBindings>
<CommandBinding Command="MyNamespace:DataCommands.Requery" Executed="RequeryCommand_Executed"></CommandBinding>
</Window.CommandBindings>
XAML von MenuItem sieht jetzt wie folgt aus:
<Grid.ContextMenu>
<ContextMenu>
<MenuItem Name="EditStatusCm" Header="Change status" Command="MyNamespace:DataCommands.Requery"/>
</ContextMenu>
</Grid.ContextMenu>
Und Event-Handler wie folgt aussieht:
private void RequeryCommand_Executed(object sender, ExecutedRoutedEventArgs e)
{
IInputElement parent = (IInputElement)LogicalTreeHelper.GetParent((DependencyObject)sender);
MyCustControl SCurrent = new MyCustControl();
SCurrent = (MuCustControl)parent;
string str = SCurrent.Name.ToString();// here I get the same error
MessageBox.Show(str);
}
Aber Debugger zeigt die gleiche Laufzeitfehler: Objektverweis nicht auf eine Instanz eines Objekts festgelegt.
Was fehlt in meinen beiden Ansätzen?
Wie sollte ich Rechtsklick Objekt in WPF Kontext Menüelement klicken Ereignishandler?
Ich habe versucht, mithilfe der Anwendung Command Ansatz als mehr WPF-ish, bekam aber den gleichen Fehler. Ich habe meine Frage bearbeitet und Schritte meines Befehlsansatzes hinzugefügt. Mein Verständnis davon, wie man die angeklickte Objektreferenz bekommt, fehlt in beiden Fällen etwas. – rem