#c# #wpf
Вопрос:
Моя основная проблема заключается в следующем:
У меня есть a DataGrid
с несколькими строками. В RowStyle
том, что я определил ContextMenu
. Я определил ContextMenuClosing
EventHandler
» в EventSetter
» в стиле внутри RowStyle
. Когда я щелкну левой кнопкой DataGridRow
ContextMenu
мыши, откроется, когда я нажму снаружи DataGrid
, ContextMenu
он будет закрыт и ContextMenuClosing
уволен. Но когда я щелкну левой кнопкой мыши первый DataGridRow
, а затем сразу же щелкну левой кнопкой мыши второй DataGridRow
, ContextMenuClosing
событие не будет запущено. В представлении ContextMenu
, которое закрывается и снова открывается, по крайней мере, это то, что я вижу.
Есть ли какие-либо идеи, почему ContextMenuClosing
Событие не было запущено? Я приведу минимальный пример.
Моя модель просмотра и модель:
public class ViewModel { public ObservableCollectionlt;Modelgt; Models { get; set; } public ViewModel() { Models = new ObservableCollectionlt;Modelgt;() { new Model() { Column1 = "Hello1", Column2 = "World1" }, new Model() { Column1 = "Hello2", Column2 = "World2" } }; } } public class Model { public string Column1 { get; set; } public string Column2 { get; set; } }
Таково мое Мнение:
lt;Window.DataContextgt; lt;local:ViewModel /gt; lt;/Window.DataContextgt; lt;Gridgt; lt;DataGrid ItemsSource="{Binding Models}"gt; lt;DataGrid.RowStylegt; lt;Style TargetType="{x:Type DataGridRow}"gt; lt;EventSetter Event="ContextMenuClosing" Handler="DataGridRow_ContextMenuClosing" /gt; lt;Setter Property="ContextMenu"gt; lt;Setter.Valuegt; lt;ContextMenugt; lt;MenuItem Header="Option1" /gt; lt;MenuItem Header="Option2" /gt; lt;MenuItem Header="Option3" /gt; lt;/ContextMenugt; lt;/Setter.Valuegt; lt;/Settergt; lt;/Stylegt; lt;/DataGrid.RowStylegt; lt;/DataGridgt; lt;/Gridgt;
Это мой код, лежащий в основе:
private void DataGridRow_ContextMenuClosing(object sender, ContextMenuEventArgs e) { }
Комментарии:
1. Потому что элемент, который «владеет»
ContextMenu
, решает не поднимать его при определенных обстоятельствах. Вам придется придумать обходной путь. Почему вы в первую очередь занимаетесь этим событием? Что ты пытаешься сделать?