按下鼠标按钮时如何创建ContextMenu

时间:2015-07-02 16:48:59

标签: c# wpf

我为一个触发鼠标右键事件的DataGrid创建了一个代码,特别是:

Error in regular expression action. parsing "\" - Illegal \ at end of pattern.

我想在条件中创建一个ContextMenu,并为ContextMenu的每个项目关联一个方法,如果该项目将被选择将执行该方法。 怎么做?

3 个答案:

答案 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
}