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 № 1Talvez 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 XAML
coloque 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
}