如何在WPF中的contextmenu中正确触发点击事件

问题描述:

因此,我试图为我的某个contextmenu项目创建一个click事件,但它引发了我以前从未见过的错误。 Google上没有太多的信息,我看到的信息对我没有帮助,因为我不明白这一点。如何在WPF中的contextmenu中正确触发点击事件

线投掷的错误是这样一个

的GridView ColumnHeaderContainerStyle = “{StaticResource的GridViewColumnHeaderStyle1}”

'cmndOP_Click' 无效。 '点击'不是 'System.Windows.Controls.GridView'上的事件。

阅读错误消息告诉我'Click'不是gridview中的有效事件,但它不在gridview中它在listviewitem中。

什么导致这个错误,我应该怎么做,以防止这种情况?

<ListView Margin="10,36,520,10" ScrollViewer.HorizontalScrollBarVisibility="Hidden" BorderBrush="Black" Padding="-1, -1, 1, 0" Background="Transparent" BorderThickness="1.000001" Name="lvUsers" Style="{DynamicResource ListViewStyle1}"> 
      <ListView.ItemContainerStyle> 
       <Style TargetType="{x:Type ListViewItem}"> 
        <Setter Property="ContextMenu"> 
         <Setter.Value> 
          <ContextMenu> 
           <MenuItem Name="cmndOP" Header="OP User" Click="cmndOP_Click"/> 
           <MenuItem Header="Kick User"/> 
           <MenuItem Header="Ban User"/> 
           <MenuItem Header="Send Command"/> 
          </ContextMenu> 
         </Setter.Value> 
        </Setter> 
        <Setter Property="Background" Value="Transparent" /> 
        <Setter Property="Template"> 
         <Setter.Value> 
          <ControlTemplate TargetType="{x:Type ListViewItem}"> 
           <Border 
         BorderBrush="Transparent" 
         BorderThickness="0" 
         Background="{TemplateBinding Background}"> 

            <GridViewRowPresenter HorizontalAlignment="Stretch" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" Width="Auto" Margin="0" Content="{TemplateBinding Content}"/> 
           </Border> 
          </ControlTemplate> 
         </Setter.Value> 

        </Setter> 

        <Style.Triggers> 
         <Trigger Property="IsMouseOver" Value="True"> 
          <Setter Property="Foreground" Value="White" /> 
          <Setter Property="Background" Value="#696969" /> 
          <Setter Property="BorderBrush" Value="#696969" /> 
          <Setter Property="BorderThickness" Value="0" /> 
         </Trigger> 

         <Trigger Property="IsSelected" Value="True"> 
          <Setter Property="Foreground" Value="White" /> 
          <Setter Property="Background" Value="#696969" /> 
          <Setter Property="BorderBrush" Value="#696969" /> 
          <Setter Property="BorderThickness" Value="0" /> 
         </Trigger> 
        </Style.Triggers> 
       </Style> 
      </ListView.ItemContainerStyle> 
      <ListView.View> 
       <GridView ColumnHeaderContainerStyle="{StaticResource GridViewColumnHeaderStyle1}"> 
        <GridViewColumn x:Name="GridViewColumnName" Header="Name" Width="165"> 
         <GridViewColumn.CellTemplate> 
          <DataTemplate> 
           <StackPanel Orientation="Horizontal"> 
            <Image x:Name="Image_GridViewColumnName" Width="16" Height="16" Source="Images\minecraft.png" /> 
            <Label Content="{Binding Username}" Visibility="Visible" /> 
           </StackPanel> 
          </DataTemplate> 
         </GridViewColumn.CellTemplate> 
        </GridViewColumn> 
       </GridView> 

      </ListView.View> 
     </ListView> 

这是

private void cmndOP_Click(object sender, RoutedEventArgs e) 
     { 
      Commands cmd = new Commands(); 
      cmd.OpUser(lvUsers.SelectedItem.ToString()); 
     } 

编辑

后面这是错误happands地方。 这也是在App.xaml中,否则我会得到另一个错误

<Style x:Key="GridViewColumnHeaderStyle1" TargetType="{x:Type GridViewColumnHeader}"> 
      <Setter Property="Template"> 
       <Setter.Value> 
        <ControlTemplate TargetType="{x:Type GridViewColumnHeader}"> 
         <Border BorderThickness="0,0,0,1" BorderBrush="Black" Background="Transparent"> 
          <TextBlock x:Name="ContentHeader" Text="{TemplateBinding Content}" Padding="5,5,5,5" Width="{TemplateBinding Width}" TextAlignment="Center" /> 
         </Border> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
      <Setter Property="OverridesDefaultStyle" Value="True" /> 
      <Setter Property="Foreground" Value="Black" /> 
      <Setter Property="FontFamily" Value="Segoe UI" /> 
      <Setter Property="FontSize" Value="12" /> 
     </Style> 
+1

您如何向我们展示'GridViewColumnHeaderStyle1'问题出现在哪里?您是否将错误文本粘贴到问题中而未读取? –

+0

你为什么要开火?为什么不把事件处理程序中的代码放入一个单独的方法中并调用该方法? –

+0

啊啊!马上更新它! –

我很惊讶地发现你的错误是从你提供的XAML重复性。当我将上下文菜单定义为资源并相应地更新设置器时,我不会再收到错误。

<ListView Margin="10,36,520,10" ScrollViewer.HorizontalScrollBarVisibility="Hidden" BorderBrush="Black" Padding="-1, -1, 1, 0" Background="Transparent" BorderThickness="1.000001" Name="lvUsers" > 
    <ListView.Resources> 
     <ContextMenu x:Key="ListViewItemContextMenu"> 
      <MenuItem Name="cmndOP" Header="OP User" Click="cmndOP_Click" /> 
      <MenuItem Header="Kick User"/> 
      <MenuItem Header="Ban User"/> 
      <MenuItem Header="Send Command"/> 
     </ContextMenu> 
    </ListView.Resources> 
    <ListView.ItemContainerStyle> 
     <Style TargetType="{x:Type ListViewItem}"> 
      <Setter Property="ContextMenu" Value="{StaticResource ListViewItemContextMenu}" />