WPF-MenuItem只显示最后一个Icon

我在配置一个ContextMenu,想实现动态后台添加MenuItem。


然而我遇到了这个问题:

无论是写死icon,还是后台赋值,都只有最后一个icon是显示的····

经过一番摸索,找到了个解决方案。

<ContextMenu ItemsSource="{Binding TabMenuModels}" Style="{StaticResource MaterialDesignContextMenu}">
    <ContextMenu.ItemContainerStyle>

        <Style BasedOn="{StaticResource MaterialDesignMenuItem}" TargetType="MenuItem">
            <Style.Resources>

                <materialDesign:PackIcon
                    x:Key="imgCTX"
                    Width="16px"
                    Height="16px"
                    x:Shared="false"
                    Kind="{Binding Path=FontIcon}" />

            </Style.Resources>

            <Setter Property="FontFamily" Value="Microsoft YaHei" />
            <Setter Property="Icon" Value="{StaticResource imgCTX}" />
            <Setter Property="Header" Value="{Binding MenuHeader}" />
            <Setter Property="Command" Value="{Binding ExcuteCommand}" />
        </Style>
    </ContextMenu.ItemContainerStyle>
</ContextMenu>

icon 设置成资源然后使用x:share=false即可(图片一样)。

实现后的效果:

目前找到比较合理的解释:

每个UI元素只能放在视觉树中的一个位置。 不能在多个MenuItem上使用相同的资源控件。 需要为每个MenuItem创建单独的资源控件。 否则,每次将其分配给新的MenuItem时,都只是将其从一个移到下一个。 x:share 特性设置为false时,会修改wpf检索资源的行为,为每一个请求都生成不同的实例,而不是共享实例。

感觉还是不够清晰,至少问题解决了,希望明白原因的大佬能分享。感谢!~~

技术交流Q群: 1012481075 群内有各种流行书籍资料
文章后续会在公众号更新,微信搜索 OneByOneDotNet 即可关注。
你的一分鼓励,我的十分动力,点赞免费,感恩回馈。喜欢就点赞评论吧,双击6666~
本网站(网站地址)刊载的所有内容,包括文字、图片、音频、视频、软件、程序、以及网页版式设计等均在网上搜集。
访问者可将本网站提供的内容或服务用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯本网站及相关权利人的合法权利。
除此以外,将本网站任何内容或服务用于其他用途时,须征得本网站及相关权利人的书面许可,并支付报酬.
本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站,予以删除.
转载请注明出处
作者昵称:OneByOneDotNet
作者链接:https://onebyone.icu/user/1
网站标题:DotNetOneByOne
网站地址:https://onebyone.icu
文章标题:WPF-MenuItem只显示最后一个Icon
文章链接:https://onebyone.icu/archives/2603
原文出处:
原文链接:
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注

WeChat
WeChat
QQ
QQ
返回顶部