Visual brush作为WPF上下文菜单中的图标

4
我希望在我的WPF用户控件的上下文菜单(treeview)中使用Visual Brush作为图标。我有一个资源字典(单独的图标xaml文件),以下是文件的几行:
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

<VisualBrush x:Key="Trashcan"
             Stretch="Uniform">

我已经在用户控件中合并了字典,并检查它已被添加并可以在用户控件的xaml代码中访问。

下面是用户控件xaml(视图)中的代码,其中必须使用图标:

 <ContextMenu x:Key=xxxxxxxx>
                <MenuItem Header="Delete" Command="{Binding xxxxxx, Source=xxxxxxx}" CommandParameter="{Binding}" IsEnabled="xxxxxxxxxx}" Icon="{StaticResource Trashcan}"/>
 </ContextMenu>

现在的问题是,我无法在上下文菜单中看到图标,如下图所示:enter image description here。目前,我已经尝试了此链接中提供的方法,但对我来说并不完全有效。除了上面提到的链接中的方法之外,是否还有其他方法可以在上下文菜单中显示视觉刷作为图标呢?请注意,由于应用程序的其他组件存在限制,因此我无法使用menuitem.icon->image。另外,请注意,我的WPF用户控件是由一个表单托管的。

你期望什么?在“ResourceDictionary”中没有图像。 - Bizhan
好的,是的,我也尝试将可视化画刷更改为图像,但我没有成功。有什么解决办法吗? - SmallestWish
1个回答

2
您需要做的是将一个 Image 设置到 MenuItem.Icon 中。
<MenuItem.Icon>
     <Image Style="{StaticResource Trashcan}"/>
</MenuItem.Icon>

在资源字典中定义该图像的样式:
<Style x:Key="Trashcan" TargetType="Image">
    <Setter Property="Source" Value="/ProjectName;component/Images/Trashcan.png"/>
    <Setter Property="Width" Value="24"/>
</Style>

新增:

如果你无法使用MenuItem.Icon,这里有一个小技巧:

<MenuItem.Header>
    <Grid>
        <TextBlock Text="........"/>
        <Image HorizontalAlignment="Left" Width="24" Margin="-24,0,0,0" 
               Style="{StaticResource Trashcan}"/>
    </Grid>
</MenuItem.Header>

我知道这一点,这就是为什么在我的问题中有一行:“由于应用程序的其他组件存在限制,我无法使用menuitem.image。” 使用brush而不是image的想法是它在选择时会改变颜色,但image不会,我想在选择时更改图标的颜色。 - SmallestWish
顺便提一下,如果您想在运行时更改图像颜色,有许多库可以实现这一点。例如,GrayscaleEffect。 - Bizhan
@stalbaig,我认为在你的问题中关于代码中VisualBrush相关部分需要做一些编辑或者另外提出一个问题。可以参考这篇文章:https://social.msdn.microsoft.com/Forums/vstudio/en-US/c7e116b7-6b66-4c6d-ac00-20e7b781aabd/visual-brush-of-a-windowsformhost?forum=wpf - Bizhan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接