在Setter.Value结构中设置事件处理程序

H.B*_*.B. 7 wpf setter events xaml styles

我有一个ListView,我想设置一个上下文菜单,我不仅可以打开一些列中的某些文本,但是在任何地方都可以打开ListViewItem,这样做我认为我只是设置我ContextMenu使用样式设置器我不能直接访问ListViewItem.

不幸的是,当您尝试这样做时,它将无法编译:

<Style TargetType="ListViewItem">
    <Setter Property="ContextMenu">
        <Setter.Value>
            <ContextMenu>
                <MenuItem Header="Header" Click="Handler"/>
                ...
            </ContextMenu>
        </Setter.Value>
    </Setter>
</Style>
Run Code Online (Sandbox Code Playgroud)

错误102'处理程序'无效.'Click'不是'System.Windows.Controls.GridView'上的事件.

我想,你可以通过使用避免这种情况EventSetterClick-event.但很明显,代码从你需要的所有包装标签中得到了充分的膨胀.

我的问题是,如果有一些解决方法,所以你不必处理EventSetters.


编辑:请参阅此问题以获取有关此错误发生原因的说明.

Fre*_*lad 10

你可以把它ContextMenu放在ListView's资源中然后用它作为一个静态资源,那样你就不必使用一个样式了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>
Run Code Online (Sandbox Code Playgroud)