当前位置: 首页 > 知识库问答 >
问题:

WPF上下文菜单:菜单项图标可见性绑定错误

鱼恩
2023-03-14

这是我的上下文菜单的样式:

<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>

命令绑定工作正常,但图标可见性绑定显示以下错误:

系统.Windows。数据错误:4:无法找到引用“RelativeSource FindAncestor,AncestorType=”System.Windows.Controls的绑定源。上下文菜单',祖先级别=“1”。BindingExpression:路径=PlacementTarget.Tag。两种NaNc;数据项=空;目标元素为“Image”(名称=“”);目标属性是“可见性”(类型为“可见性”)

为什么?请注意,这是有效的:

<MenuItem Header="TEST" Visibility="{Binding PlacementTarget.Tag.BothNaNc, RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=ContextMenu}, Converter={StaticResource BoolToVis}}"/>

共有1个答案

冷浩瀚
2023-03-14

您可以将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>

如果将<code>Icon</code>属性设置为在<code>中内联定义的<code>Image</code>元素

 类似资料:
  • 这里有一个项目,我需要在WPF应用程序中自定义上下文菜单,其中将在所有MenuItems的底部放置一个按钮。 但是,如果我要通过XAML添加按钮,它将作为集合中的另一项出现在上下文菜单中,鼠标移过高亮显示将作用于它。 我希望有一个上下文菜单调优到网格样的样式,这样我就可以自定义样式下的它。 有什么想法可以实现这一点(最好是在XAML中)吗?

  • 我在Confluence上运行的HTML/CSS主题上实现了以下菜单。 默认情况下,我正在运行的主题提供了激活所有菜单项的下拉菜单的选项。但是,我希望只为其中一个菜单项显示下拉菜单。 该主题没有提供切换特定菜单项下拉列表的选项,这就是为什么我不得不求助于自定义CSS。 与发行说明菜单项对应的HTML如下-- 此外,添加以下自定义CSS将删除所有菜单项的下拉菜单。 我希望CSS有条件地不显示RELE

  • 我使用的菜单项是这样的: 这是上面项目中的一个可绘制tused,比如android:icon=“@drawable/tv”,所以这是电视。xml: 我在bottomNavigationView中使用以下菜单: 一切都很好,但正如你看到的菜单项,它们有图标,但我设置标题为“@null”,所以底部栏现在有图标,图标下面没有文本,但它仍然有空标题的空间,这会导致图标变小,所以我如何设置没有标题,如使标题

  • 我有一个包含多个菜单项的抽屉菜单。我正在尝试动态更改其中一个菜单项的菜单图标和文本颜色。以下代码位于具有抽屉菜单的活动类之一的中: 下面是方法定义: 虽然我可以成功设置菜单项的标题名和字体颜色,但对菜单图标没有影响。我无法改变这一点。为什么会这样?

  • 我在Visual Studio C#IDE中定义了一个ContextMenuStri上下文菜单,并对程序进行编码,以便当用户右键单击屏幕上的一个对象时,上下文菜单成功弹出。用户可以从上下文菜单中选择一个项目,代码成功确定用户选择了哪个上下文菜单项。到目前为止还不错。问题是上下文菜单接受右键单击作为选择上下文菜单项的机制。当我不小心双击右键单击屏幕上的一个对象时,我注意到了这一点...菜单在第一次单

  • 我创建了一个包含单个项目的菜单。 这是我在工具栏中的一些活动中使用的,单击时它会下拉一个菜单,目前只有一个选项,但将来可能会更多。 除了图标外,一切都很好,它是传统3点白色的矢量图像。根据showAsAction在更改颜色时的设置。 目前show AsAction设置为从不,因此单击时会显示一个菜单,这就是我想要的,但是图标变为深灰色。如果我将此选项设置为“始终”,则图标变为白色,但我丢失了下拉菜