【问题标题】:WPF ContextMenu: MenuItem Icon visibility binding errorWPF ContextMenu:MenuItem 图标可见性绑定错误
【发布时间】: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}}"/>

【问题讨论】:

    标签: c# wpf data-binding contextmenu visibility


    【解决方案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 属性设置为您在&lt;Setter.Value&gt; 中定义内联的Image 元素,就像您目前所做的那样,它将从父WindowUserControl 或任何地方继承DataContext Style 已定义。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-12-09
      • 2012-01-30
      • 2011-08-31
      • 2016-01-31
      • 2014-03-31
      • 2010-12-01
      • 2012-05-23
      相关资源
      最近更新 更多