我想动态地在代码中填充菜单并在c#中设置其图标。将MenuItem.Icon设置为不起作用的图像
我已经读到这里这篇文章,给出的答案似乎是完全合理的:
WPF setting a MenuItem.Icon in code
我的解释:
mItem.Icon = new Image
{
//filename is just image.png in build output folder
Source = new BitmapImage(new Uri(fileName, UriKind.Relative))
};
,但是当涉及到运行时,图标麦凯纳那里。在检查WPF可视化器中的数据时,它说图像的ActualHeight和ActualWidth为0,并且看起来没有初始化(这就是说,IsInitialized和IsLoaded是false)。
我打赌,我正在做某种新手的错误的地方,但我只是没有看到它(备案,菜单的所有其他方面如预期工作)提前
谢谢:)
编辑1: 目前,图像只是一个测试的占位符,我已经添加了作为项目的链接,然后将'build action'设置为'none'和'copy to output directory ''复制,如果更新'。图像被称为“buttonIndicator_off.png”,并在运行时的文件名字符串为“buttonIndicator_off.png”
编辑2: 也试过这样:
var bm = new BitmapImage();
bm.BeginInit();
bm.CacheOption = BitmapCacheOption.OnLoad;
bm.UriSource = new Uri(fileName, UriKind.Relative);
bm.EndInit();
mItem.Icon = new Image {
Source = bm
};
,并设置图像编译作为一种资源和使用:
mItem.Icon = new Image
{
Source = new BitmapImage(new Uri("pack://application:,,,/buttonIndicator_off.png"))
};
我几乎可以肯定所有这些解决方案应该工作,所以我开始觉得有什么奇怪的事情。
编辑3:测试图像与矩形填充:
rectangle_testImage.Fill = new ImageBrush(bm);
和这个作品
你确定了'fileName'设置是否正确?如果可能的话,请告诉你如何将你的图像导入到你的项目以及'fileName'的特定字符串。 – 2014-10-28 14:11:43
当然。编辑相应的问题 – 2014-10-28 14:31:44