gpt4 book ai didi

wpf - 带有图标的 MenuItem 样式只创建一个图标

转载 作者:行者123 更新时间:2023-12-03 10:55:25 24 4
gpt4 key购买 nike

我在为使用 View 模型作为 ItemsSource 的动态菜单呈现图标时遇到问题。
我使用的解决方案在此处概述
MVVM Dynamic Menu UI from binding with ViewModel

基本布局如下

<Grid>
<Grid.Resources>
<HierarchicalDataTemplate DataType="{x:Type ViewModels:HeaderedItemViewModel}"
ItemsSource="{Binding Path=Children}">
<ContentPresenter RecognizesAccessKey="True"></ContentPresenter>
</HierarchicalDataTemplate>
<Style TargetType="{x:Type MenuItem}">
<Setter Property="Header" Value="{Binding Path=Header}" />
<Setter Property="InputGestureText" Value="{Binding Path=InputGestureText}" />
<Setter Property="Command" Value="{Binding Path=Command}" />
<Setter Property="Icon">
<Setter.Value>
<Image Source="{Binding Path=Icon}" Height="16px" Width="16px" />
</Setter.Value>
</Setter>
</Style>
</Grid.Resources>
<Menu Grid.Row="0" ItemsSource="{Binding Path=Shell.Navigation.Menus}" />
</Grid>

在上述样式中,绑定(bind)“Icon”是“ImageSource”。这是如下设置的。

        BitmapImage image = null;

if (!string.IsNullOrEmpty(imagePath))
{
image = new BitmapImage(new Uri(imagePath, UriKind.Relative));
image.CacheOption = BitmapCacheOption.OnLoad;
image.CreateOptions = BitmapCreateOptions.IgnoreImageCache;
}
var menu = new HeaderedItemViewModel
{
Header = header,
InputGestureText = inputGesture,
ImagePath = imagePath,
Icon = image,
Command = command,
IsEnabled = isEnabled
};

我遇到的问题是图标。
似乎一次只会渲染一个图标?这就是我的意思。

enter image description here

并打开下拉菜单...

enter image description here

一旦另一个图像被渲染,第一个图像就会消失?换句话说,只有最后一个图像是可见的。菜单中的所有图像都会发生这种情况。有任何想法吗?

最佳答案

为您的图标值添加 x:Shared=false。
为此,您应该在资源中声明 Image:

<Grid>
<Grid.Resources>

<Image x:Key="imgCTX" x:Shared="false"
Source="{Binding Path=Icon}" Height="16px" Width="16px"/>
<HierarchicalDataTemplate DataType="{x:Type ViewModels:HeaderedItemViewModel}"
ItemsSource="{Binding Path=Children}">
<ContentPresenter RecognizesAccessKey="True"></ContentPresenter>
</HierarchicalDataTemplate>
<Style TargetType="{x:Type MenuItem}">
<Setter Property="Header" Value="{Binding Path=Header}" />
<Setter Property="InputGestureText" Value="{Binding Path=InputGestureText}" />
<Setter Property="Command" Value="{Binding Path=Command}" />
<Setter Property="Icon" Value="{StaticResource imgCTX}" />
</Style>
</Grid.Resources>
<Menu Grid.Row="0" ItemsSource="{Binding Path=Shell.Navigation.Menus}" />
</Grid>

关于wpf - 带有图标的 MenuItem 样式只创建一个图标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6177550/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com