/ / Como criar um ContextMenu quando o botão do mouse é pressionado - c #, wpf

Como criar um ContextMenu quando o botão do mouse é pressionado - c #, wpf

Eu criei um código para um DataGrid que dispara o evento do botão direito do mouse, em particular:

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

}
}

Eu quero criar um ContextMenu dentro da condição e associar para cada item do ContextMenu um método que será executado se o item for escolhido. Como fazer isso?

Respostas:

1 para resposta № 1

Talvez você possa conseguir isso em XAML. Supondo que você queira ter um menu de contexto para as linhas do seu DataGrid, você pode adicionar a propriedade ContextMenu ao seu DataGridRow, por exemplo:

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

Em seguida, adicione o próprio menu de contexto no dicionário 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>

Em seguida, escreva um manipulador de eventos de clique para cada item de menu para executar seu 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 resposta № 2

Você pode vincular o conteúdo do datacontext a uma propriedade e preenchê-lo (propriedade) no evento Button. Não se esqueça de definir a condição de atualização na ligação do menu de contexto (xaml)


0 para resposta № 3

Na minha opinião, a melhor forma de resolver isso é adicionar um ContextMenu para cada linha de DataGrid, podemos fazer da seguinte maneira:

No XAMLcoloque no seu DataGrid um ouvinte do evento LoadingRow:

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

No CodeBehind, adicione o ContextMenu para cada linha:

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
}