MenuItem.Icon丢失了它的图像

时间:2011-03-15 14:30:50

标签: c# wpf xaml

我有一个像资源;

  <Window.Resources>

    <MenuItem Header="*Rename" x:Key="ctxItem" x:Name="removeItem" Click="removeItem_Click" Padding="5,5,5,5">
        <MenuItem.Icon>
            <Image Margin="0,0,0,0" Source="../images/removeitem.png" Width="16" Height="16" />
        </MenuItem.Icon>
    </MenuItem>

在后面的代码中,我执行以下操作;

ContextMenu ctxTmp = new ContextMenu();

        MenuItem mni = ((MenuItem)this.Resources["ctxItem"]);
        MenuItem mniTmp = new MenuItem();
        mniTmp.Click += new RoutedEventHandler(removeItem_Click);
        mniTmp.Name = "removeItem" + x;
        mniTmp.Tag = pic;
        mniTmp.Icon = mni.Icon;
        mniTmp.Header = mni.Header;
        mniTmp.CommandTarget = pic;
        ctxTmp.Items.Add(mniTmp);
        x++;
        return ctxTmp;

并将我的对象的ContextMenu设置为返回的项目。

行为是这样的: 它在所需的画布中显示我的UIelement,contextMenu很好。 但是当我添加第二个对象时。上下文菜单仍然有效,但我正在使用的图像没有显示。它很奇怪,无法弄明白。

感谢Poyraz

2 个答案:

答案 0 :(得分:0)

我对您的图像源路径有效感到惊讶 根据这个网络site,我将改变你的道路:

Source="../images/removeitem.png"  

到URI

Source="pack://application:,,,/AssemblyName;component/images/removeitem.png"

答案 1 :(得分:0)

您不能在两个MenuItem中重复使用相同的Image元素。您实际上是在两个位置放置相同的视觉效果,这是不允许的。您需要创建一个新的Image实例,即使它指向同一图像。

然而,您可以重用ImageSource的实例。