2011-01-20 12 views
7

私はListViewを持っています。私はコンテキストメニューをいくつかの列のテキストを右クリックするだけでなく、ListViewItemのどこかで右クリックするだけでなく、だから私はContextMenuスタイルセッターを使用して設定したと思った。ListViewItemに直接アクセスすることはできない。Setter.Value構造体内にイベントハンドラを設定する

残念ながらあなたはそれがコンパイルされません。このようにそれをしようとすると:

<Style TargetType="ListViewItem"> 
    <Setter Property="ContextMenu"> 
     <Setter.Value> 
      <ContextMenu> 
       <MenuItem Header="Header" Click="Handler"/> 
       ... 
      </ContextMenu> 
     </Setter.Value> 
    </Setter> 
</Style> 

エラー102「ハンドラ」は有効ではありません。 'クリック'は、 'System.Windows.Controls.GridView'のイベントではありません。

私はClick -eventにEventSetterを使用することでこれを回避できると考えていました。しかし、コードが必要なすべてのラッピングタグからかなり膨らんでいることは明らかです。

私はいくつかの回避策があるので、EventSettersに対処する必要はありません。


編集:このエラーが発生する理由に説明のためのthis questionを参照してください。

答えて

10

あなたはListViewContextMenuを置くことができるのリソースと、静的リソースとしてそれを使用する、あなたはMenuItemのためのスタイルを使用する必要はありません。そのようさん

:ここでは例です
<ListView ...> 
    <ListView.Resources> 
     <ContextMenu x:Key="listViewContextMenu"> 
      <MenuItem Header="Header" Click="MenuItem_Click"/> 
     </ContextMenu> 
    </ListView.Resources> 
    <ListView.ItemContainerStyle> 
     <Style TargetType="ListViewItem"> 
      <Setter Property="ContextMenu" Value="{StaticResource listViewContextMenu}"/> 
     </Style> 
    </ListView.ItemContainerStyle> 
    <!--...--> 
</ListView> 
+0

良いアイデア!ありがとう。 –

0

ListBoxItem.HorizontalContentAlignmentStretchと入力してにContextMenuを入力してください。

<Grid> 
    <Grid.Resources> 
     <PointCollection x:Key="sampleData"> 
      <Point X="10" Y="20"/> 
      <Point X="30" Y="40"/> 
     </PointCollection> 
    </Grid.Resources> 
    <ListBox Width="100" ItemsSource="{StaticResource sampleData}"> 
     <ListBox.ItemContainerStyle> 
      <Style TargetType="ListBoxItem"> 
       <Setter Property="HorizontalContentAlignment" Value="Stretch"/> 
      </Style> 
     </ListBox.ItemContainerStyle> 
     <ListBox.ItemTemplate> 
      <DataTemplate> 
       <Grid Background="Red"> 
        <Grid.ContextMenu> 
         <ContextMenu> 
          <MenuItem Header="Test" Click="MenuItem_Click"/> 
         </ContextMenu> 
        </Grid.ContextMenu> 
        <TextBlock Text="{Binding}"/> 
       </Grid> 
      </DataTemplate> 
     </ListBox.ItemTemplate> 
    </ListBox> 
</Grid> 
+0

私はGridViewを使用しているので、私は恐れることはないと恐れています... –

+0

申し訳ありませんが、質問はListBoxだと私は実際にはListViewであることを他のヒントを見落としました。 –

+0

ああ、まあまあ、ListBoxを3回書いてしまったのですが、それはコピーされて以来、コード内でそれを混乱させていませんでした。 –

関連する問題