2017-10-09 43 views
0

因此,我試圖爲我的某個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

啊啊!馬上更新它! –

回答

1

我很驚訝地發現你的錯誤是從你提供的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}" />