以下代码正常,
<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>
答案 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
,这就是您看到异常的原因。