我为一个触发鼠标右键事件的DataGrid创建了一个代码,特别是:
Error in regular expression action. parsing "\" - Illegal \ at end of pattern.
我想在条件中创建一个ContextMenu,并为ContextMenu的每个项目关联一个方法,如果该项目将被选择将执行该方法。 怎么做?
答案 0 :(得分:1)
也许你可以在XAML中实现这一目标。假设您想要为DataGrid的行设置上下文菜单,可以将ContextMenu属性添加到DataGridRow,例如:
<DataGrid>
<DataGrid.RowStyle>
<Style TargetType="DataGridRow">
<Setter Property="ContextMenu" Value="{StaticResource theContextMenu}" />
</Style>
</DataGrid.RowStyle>
</DataGrid>
然后在资源字典中添加上下文菜单:
<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>
然后为每个菜单项编写一个click事件处理程序来执行您的方法:
private void menuItem1_Click(object sender, RoutedEventArgs e)
{
// execute your method..
}
private void menuItem2_Click(object sender, RoutedEventArgs e)
{
// execute your method..
}
答案 1 :(得分:0)
您可以将datacontext内容绑定到属性,而不是在Button事件中填充It(propertie)。不要忘记在Contextmenu绑定(xaml)中设置更新条件
答案 2 :(得分:0)
在我看来,最好的工作形式是为ContextMenu
的每一行添加DataGrid
,我们可以通过以下方式完成:
在XAML
中,将DataGrid
听众放入事件LoadingRow
:
<!-- resume version of declaration your DataGrid -->
<DataGrid x:Name="Squadre_DataGrid" LoadingRow="Squadre_DataGrid_LoadingRow" />
在CodeBehind
中,为每行添加ContextMenu
:
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
}