2017-10-09 8 views
0

私はコンテキストメニュー項目の1つに対してクリックイベントを作成しようとしていますが、以前は見たことのないエラーが表示されます。 Googleにはあまりにも多くの情報がありませんでした。私が理解できなかったので、私が見た情報は私を助けませんでした。WPFのコンテキストメニューでclickイベントを正しく発生させるには

エラーをスローラインは

'cmndOP_Click' を言っては有効ではありませんこれ

のGridView ColumnHeaderContainerStyle = "{StaticResource GridViewColumnHeaderStyle1}" です。 'Click'は 'System.Windows.Controls.GridView'のイベントではありません。

はエラーメッセージを読むと、「クリック」のGridViewで有効なイベントではありませんが、そのないのListViewItem内のGridViewのをしていることを私に伝えます。

このエラーの原因は何ですか?これを防ぐには、今後何をする必要がありますか?

<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()); 
     } 

EDIT

ところエラーhappandsです。そう私は

<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

別のエラーを取得してしまうため これはApp.xamlでもある私はあなたのエラーはあなたが提供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}" /> 
関連する問題