WPF ContextMenu:MenuItem 图标可见性绑定错误
Posted
技术标签:
【中文标题】WPF ContextMenu:MenuItem 图标可见性绑定错误【英文标题】:WPF ContextMenu: MenuItem Icon visibility binding error 【发布时间】:2017-07-23 15:54:14 【问题描述】:这是我的 ContextMenu 的样式:
<Style x:Key="Diostyle" TargetType="ContentControl">
<Setter Property="Tag" Value="Binding Content,RelativeSource=RelativeSource Mode=Self"/>
<Setter Property="ContextMenu">
<Setter.Value>
<ContextMenu>
<MenuItem Style="StaticResource DeleteMenuItemStyle"/>
<!--<MenuItem Header="Normality">
<MenuItem Style="StaticResource NcMenuItemStyle"/>
<MenuItem Style="StaticResource NaMenuItemStyle"/>
</MenuItem>-->
<MenuItem Style="StaticResource BothContactsMenuItemStyle"/>
</ContextMenu>
</Setter.Value>
</Setter>
...
这是我的 MenuItem 的样式:
<Style x:Key="BothContactsMenuItemStyle" TargetType="MenuItem">
<Setter Property="Header" Value="Both Contacts"/>
<Setter Property="Command" Value="Binding PlacementTarget.Tag.BothNaNcChangeCommand,RelativeSource=RelativeSource Mode=FindAncestor,AncestorType=ContextMenu"/>
<Setter Property="Icon">
<Setter.Value>
<Image Style="StaticResource Tick16Style" Visibility="Binding PlacementTarget.Tag.BothNaNc, RelativeSource=RelativeSource Mode=FindAncestor,AncestorType=ContextMenu, Converter=StaticResource BoolToVis"/>
</Setter.Value>
</Setter>
</Style>
命令绑定正在工作,而不是图标可见性绑定给我这个错误:
System.Windows.Data 错误:4:找不到绑定源 参考'RelativeSource FindAncestor, AncestorType='System.Windows.Controls.ContextMenu',AncestorLevel='1''。 BindingExpression:Path=PlacementTarget.Tag.BothNaNc;数据项=空; 目标元素是'图像'(名称='');目标属性是“可见性” (类型“可见性”)
为什么? 请注意,这是有效的:
<MenuItem Header="TEST" Visibility="Binding PlacementTarget.Tag.BothNaNc, RelativeSource=RelativeSource Mode=FindAncestor,AncestorType=ContextMenu, Converter=StaticResource BoolToVis"/>
【问题讨论】:
【参考方案1】:您可以将Image
元素定义为资源。这应该有效:
<Image x:Key="img" x:Shared="False"
Style="StaticResource Tick16Style"
Visibility="Binding PlacementTarget.Tag.BothNaNc, RelativeSource=RelativeSource Mode=FindAncestor,AncestorType=ContextMenu,
Converter=StaticResource BoolToVis"/>
<Style x:Key="BothContactsMenuItemStyle" TargetType="MenuItem">
<Setter Property="Header" Value="Both Contacts"/>
<Setter Property="Command" Value="Binding PlacementTarget.Tag.BothNaNcChangeCommand, RelativeSource=RelativeSource Mode=FindAncestor,AncestorType=ContextMenu"/>
<Setter Property="Icon" Value="StaticResource img" />
</Style>
如果您将Icon
属性设置为您在<Setter.Value>
中定义内联的Image
元素,就像您目前所做的那样,它将从父Window
或UserControl
或任何地方继承DataContext
Style
已定义。
【讨论】:
以上是关于WPF ContextMenu:MenuItem 图标可见性绑定错误的主要内容,如果未能解决你的问题,请参考以下文章
WPF ContextMenu 和 MenuItem 无法在默认样式 WPF 中设置 OverridesDefaultStyle 属性