2

我有一个看起来像这样ContextMenu的:App.xaml

<ContextMenu x:Key="TreeContextMenuTest" ItemsSource="{Binding ContextMenu}">....

然后我有一个ListView,其项目的样式为Themes/Generic.xaml。看起来像这样(我已经删除了不相关的东西。样式应用正确,我的问题只是关于如何附加上下文菜单)

<Style TargetType='{x:Type ListViewItem}'>
    <Setter Property="ContextMenu" Value="{StaticResource TreeContextMenuTest}" />
</Style>

但是,我确实得到DependencyProperty.UnsetValue is not a valid value for property ContextMenu了错误。有任何想法吗?

4

2 回答 2

3

正如评论中提到的,而不是StaticResource使用DynamicResource-

<Setter Property="ContextMenu" Value="{DynamicResource TreeContextMenuTest}" />

请参阅this以供参考 - StaticResource vs DynamicResource

于 2013-06-01T09:01:44.163 回答
0

我已经测试了您的解决方案,它似乎是有序的:

MainWindow.xaml:

<Window x:Class="WpfApplication3.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="525">
<Grid>
    <Grid.Resources>
        <Style TargetType='{x:Type ListViewItem}'>
            <Setter Property="ContextMenu" Value="{StaticResource TreeContextMenuTest}" />
        </Style>
    </Grid.Resources>
    <ListView>
        <ListViewItem>aaa</ListViewItem>
        <ListViewItem>bbb</ListViewItem>
        <ListViewItem>ccc</ListViewItem>
    </ListView>
</Grid>

应用程序.xaml:

<Application x:Class="WpfApplication3.App"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         StartupUri="MainWindow.xaml">
<Application.Resources>
    <ContextMenu x:Key="TreeContextMenuTest" ItemsSource="{Binding ContextMenu}"/>

</Application.Resources>

应用程序.xaml.cs:

public partial class App : Application
{
    public ObservableCollection<MenuItem> ContextMenu { get; set; }

    public App()
    {
        ContextMenu = new ObservableCollection<MenuItem>();
        var mi = new MenuItem {Name = "Test"};
        ContextMenu.Add(mi);
    }
}

我不知道您用来填充上下文菜单项的方式,我建议您不要在绑定中执行此操作,而是在 xaml 文件中执行此操作,但是会出现一个右键单击菜单项,如果我将其更改为标准的 menuItems 填充,他们也正确地出现了。

编辑:当说标准人口时,我的意思是这里解释:

http://wpftutorial.net/ContextMenu.html

于 2013-06-01T08:30:18.960 回答