MenuItem.Icon仅出现在最后一项上

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MenuItem.Icon仅出现在最后一项上相关的知识,希望对你有一定的参考价值。

我有一个菜单,项目上有以下样式:

<Style TargetType="MenuItem">
    <Setter Property="Template" Value="{StaticResource MenuItem}"/>
    <Setter Property="Icon">
        <Setter.Value>
            <TextBlock FontWeight="Bold">Ic</TextBlock>
        </Setter.Value>
    </Setter>
    <Setter Property="Header" Value="{Binding Name}"/>
    <Setter Property="ItemsSource" Value="{Binding SubItems}"/>
</Style>

NameSubItems是类MenuItem的属性。菜单的ItemsSource属性绑定到List<MenuItem>类型的对象)

问题是“图标”部分仅出现在菜单的最后一项:

enter image description here

此外,如果我点击展开“播放列表”项目,这里发生了什么:enter image description here

我最终想要将每个Item绑定到它自己的Icon,但这似乎也不起作用。是什么原因造成了这种不端行为以及如何解决这个问题?

更新我见过这个:MenuItem style with icon creates only one icon,但它不适合我,因为a。 x:Shared=false做了XamlParseException和b。如果我把它移出Style.Resources它没有例外,但根本没有用。请注意,我确实需要在INSIDE中使用Style,因为最终我希望它绑定到我将MenuItem绑定到的类的属性。

答案

不要共享TextBlock

 <TextBlock x:Key="tb"  x:Shared="false" FontWeight="Bold">Ic</TextBlock>


<Style  TargetType="{x:Type MenuItem}">
    ...             
   <Setter Property="Icon" Value="{StaticResource tb}"/>
</Style>

以上是关于MenuItem.Icon仅出现在最后一项上的主要内容,如果未能解决你的问题,请参考以下文章

WPF 在代码中设置 MenuItem.Icon

Gatsby 源插件仅显示 GraphQL 中数组中的最后一项

MagicalRecord 导入仅保存最后一项

Javascript 仅设置数组中最后一项的属性

Spannable String 仅适用于 ListView 中的最后一项

For循环仅返回最后一项