Событие WPF «ContextMenuClosing» не срабатывает при переключении между сетками данных по щелчку левой кнопкой мыши

#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 , решает не поднимать его при определенных обстоятельствах. Вам придется придумать обходной путь. Почему вы в первую очередь занимаетесь этим событием? Что ты пытаешься сделать?