Wie ermittelt man das Basis-Element, aus welchem ein ContextMenu geöffnet wurde
In Visual Studio, WPF
Im MenuItem->Click-Event
Zum Ermitteln, welches FrameworkElement das ContextMenü geöffnet hat, dann kann man das SourceElement durch ContextMenu.PlacementTarget ermitteln
private void Item_Click(object sender, RoutedEventArgs e) { //-------------< Item_Click() >---------------------- //*ContextMenu_Item //*: MenuItem__IDMitarbeiter_6_IDAbwesenheit_1_DatePlan_20190205 MenuItem menuItem = (MenuItem) sender; string sName = menuItem.Name;
//< QuellElement holen > ContextMenu contextMenu = (ContextMenu) menuItem.Parent; FrameworkElement element= (FrameworkElement) contextMenu.PlacementTarget; //</ QuellElement holen > //-------------</ Item_Click() >---------------------- } |
Damit man aber auch das ContextMenu zur Laufzeit finden kann muss man dem ContextMenu beim Erstellen ebenfalls das PlacementTarget zuweisen
contextMenu.PlacementTarget = element ; |
C# wpf Contextmenu erstellen
private void Open_ContextMenu(object sender, MouseButtonEventArgs e) { //---------------------< Open_ContextMenu() >---------------------
//< init > //*get values from drag_button_start FrameworkElement element= (FrameworkElement) sender; string sControlname = element.Name; int IDMitarbeiter = clsStrings.get_Key_Value_from_String_as_Integer(sControlname, "IDMitarbeiter"); String DatePlan = clsStrings.get_Key_Value_from_String(sControlname,"DatePlan"); //</ init >
ContextMenu contextMenu = new ContextMenu();
//--< Get_Fehlzeiten >-- var data_Abwesenheiten = db.tblBase_Abwesenheitsgruende;
foreach (var Abwesenheit in data_Abwesenheiten) { //--</ Get_Fehlzeiten >-- int IDAbwesenheit = Abwesenheit.IDAbwesenheitsgrund; string Abwesenheitsgrund = Abwesenheit.Abwesenheitsgrund; string sBackgroundColor = Abwesenheit.Farbe; string sTextColor = Abwesenheit.Textfarbe; //--< MenuItem_anfuegen >--
MenuItem item = new MenuItem(); item.Header = Abwesenheitsgrund ; item.Name = "MenuItem_" + "_IDMitarbeiter_" + IDMitarbeiter + "_IDAbwesenheit_" + IDAbwesenheit + "_DatePlan_" + DatePlan; if (sBackgroundColor != ""){ //item.Background = new SolidColorBrush(ColorConverter.ConvertFromString(sBackgroundColor)); }
//< click_Event > item.Click += Item_Click; ; //</ click_Event >
//*anfuegen contextMenu.Items.Add(item);
//--</ MenuItem_anfuegen >-- }
//< anfuegen > //*an wpf Element als contextmenu anfuegen //contextMenu.Visibility = Visibility.Visible; element.ContextMenu = contextMenu; contextMenu.PlacementTarget = element ; //*fuer referenz in menuItem //< anfuegen >
//< anzeigen > contextMenu.IsOpen= true; //*anzeigen, aufklappen //< anzeigen > //*Original-Event ausschalten //*damit der Event nicht durch den original-Mausklick geschlossen wird, muss man den Vorgang beenden e.Handled = true;
//---------------------</ Open_ContextMenu() >--------------------- } |