/ / Cómo crear un ContextMenu cuando se presiona el botón del mouse - c #, wpf

Cómo crear un ContextMenu cuando se presiona el botón del mouse - c #, wpf

Hice un código para un DataGrid que activa el evento del botón derecho del mouse, en particular:

private void Squadre_DataGrid_MouseClick(object sender, MouseEventArgs e)
{
if (e.RightButton == MouseButtonState.Pressed)
{
//Context menu

}
}

Quiero crear un ContextMenu dentro de la condición y asociar para cada elemento del ContextMenu un método que se ejecutará si se elige el elemento. ¿Como hacer esto?

Respuestas

1 para la respuesta № 1

Quizás puedas lograr eso en XAML. Suponiendo que desea tener un menú contextual para las filas de su DataGrid, puede agregar la propiedad ContextMenu a su DataGridRow, por ejemplo:

<DataGrid>
<DataGrid.RowStyle>
<Style TargetType="DataGridRow">
<Setter Property="ContextMenu" Value="{StaticResource theContextMenu}" />
</Style>
</DataGrid.RowStyle>
</DataGrid>

Luego agregue el menú contextual en el diccionario de recursos:

<Window.Resources>
<ResourceDictionary>
<ContextMenu x:Key="theContextMenu">
<MenuItem Header="Menu Item 1" Click="menuItem1_Click">
</MenuItem>
<MenuItem Header="Menu Item 2" Click="menuItem2_Click">
</MenuItem>
</ContextMenu>
</ResourceDictionary>
</Window.Resources>

Luego escriba un controlador de eventos de clic para cada elemento del menú para ejecutar su método:

private void menuItem1_Click(object sender, RoutedEventArgs e)
{
// execute your method..
}

private void menuItem2_Click(object sender, RoutedEventArgs e)
{
// execute your method..
}

0 para la respuesta № 2

Puede vincular el contenido de datacontext a una propiedad y luego llenarlo (propiedad) en su evento Button. No olvide establecer la condición de actualización en el enlace del menú contextual (xaml)


0 para la respuesta № 3

En mi opinión, la mejor forma de resolver esto es agregar un ContextMenu por cada fila de DataGrid, podemos hacerlo de la siguiente manera:

En el XAML, colocar en su DataGrid un oyente al evento LoadingRow:

<!-- resume version of declaration your DataGrid -->
<DataGrid x:Name="Squadre_DataGrid" LoadingRow="Squadre_DataGrid_LoadingRow" />

En el CodeBehind, vamos agrega el ContextMenu por cada fila:

private void Squadre_DataGrid_LoadingRow(object sender, DataGridRowEventArgs e)
{
ContextMenu _contextMenu = new ContextMenu();
MenuItem mia = new MenuItem();//item 1
MenuItem mib = new MenuItem();//item 2
....
_contextMenu.Add(mia);
_contextMenu.Add(mib);
....
e.Row.ContextMenu = _contextMenu;//add context menu to row
}