WPF上下文菜单的样式设置器

时间:2011-07-05 13:04:52

标签: .net wpf

以下代码正常,

<ContextMenu ItemsSource="{Binding SourceA}" Visibility="{Binding SourceAVisible,Converter={StaticResource BoolToHiddenConverter}}" />

我认为以下代码是等效的,但它会抛出一个运行时异常,说明在使用ItemsSource之前必须清除items集合。

<ContextMenu ItemsSource="{Binding SourceA}">
                <Style TargetType="{x:Type ContextMenu}">
                    <Setter Property="ContextMenu.Visibility" Value="{Binding SourceAVisible,Converter={StaticResource BoolToHiddenConverter}}"/>
                </Style>
 </ContextMenu>

2 个答案:

答案 0 :(得分:3)

    <ContextMenu ItemsSource="{Binding SourceA}">
            <ContextMenu.Style>
                <Style TargetType="{x:Type ContextMenu}">
                    <Setter Property="ContextMenu.Visibility" Value="{Binding SourceAVisible,Converter={StaticResource BoolToHiddenConverter}}"/>
                </Style>
            </ContextMenu.Style>
        </ContextMenu>

如果在项目的标签之间放置任何内容,则假定它是内容(在本例中为已设置的ItemsSource)。您需要隐式告诉WPF您正在设置样式的值。

答案 1 :(得分:1)

您忘了将<Style>包裹在<ContextMenu.Style>中。因此,它正在尝试将您的Style实例添加为ContextMenu的子项 - 也就是其Items集合。由于您还设置了ItemsSource,这就是您看到异常的原因。