提问者:小点点

WPF将自定义ContextMenu添加到另一视图中引用的视图


我试图完成的是将上下文菜单放置到在另一个视图中引用的列表框项中:

<UserControl x:Class="Foo.Bar.MyTestApp.Views.ListBoxPresenterView"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xmlns:views="clr-namespace:Foo.Bar.MyTestApp.Views">
    <Grid>
        
        <views:MyListBoxView />
    </Grid>
</UserControl>

这可以很好地显示我的MyListBoxView.xaml。但是,我想知道的是,是否可以向视图添加上下文菜单:来自ListBoxPresenterView.xaml的MyListBoxView。原因是我只想让MyListBoxView.xaml尽可能通用。所以如果我想对它做任何特殊的修改,那么就让它只在引用它的类中。

所以本质上是这样的:

<views:MyListBoxView >
<style TargetType="ListBoxItem">
... add context menu to a list box item template
</ListBox>
<views:MyListBoxView />

如果对此有任何想法,将不胜感激。


共1个答案

匿名用户

如果MyListBoxView确实是ListView,则可以像往常一样设置其或其项容器的ContextMenu:

<views:MyListBoxView>
    <views:MyListBoxView.ItemContainerStyle>
        <Style TargetType="ListBoxItem">
            <Setter Property="ContextMenu">
                <Setter.Value>
                    <ContextMenu />
                </Setter.Value>
            </Setter>
        </Style>
    </views:MyListBoxView.ItemContainerStyle>
</views:MyListBoxView>

如果它是UserControl,则可以向UserControl添加依赖项属性,然后在MyListBoxView的XAML标记中添加该属性。

ListBoxPresenterView:

<views:MyListBoxView ItemContextMenu="..." />

MyListBoxView:

<Setter Property="ContextMenu"
    Value="{Binding ItemContextMenu, RelativeSource={RelativeSource AncestorType=UserControl}}">