MenuItem图标并不总是显示

时间:2011-06-05 10:03:43

标签: wpf binding

  

可能重复:
  MenuItem style with icon creates only one icon

我正在开发一个简单的插件加载器(基于MEF构建),它可以通过主应用程序的托盘图标托管util应用程序。托盘图标有一个上下文菜单,其中显示所有插件。

每个插件都有自己的图标,通过IExtension界面中的“Icon”属性公开,这些图标的绑定设置在样式和Source属性中,如下所示:

<Style x:Key="MenuItemStyle" TargetType="{x:Type MenuItem}" BasedOn="{StaticResource BaseMenuItemStyle}">
    <Setter Property="HeaderTemplate">
        <Setter.Value>
            <DataTemplate>
                <ContentPresenter HorizontalAlignment="Left" VerticalAlignment="Center" Content="{Binding}" />
            </DataTemplate>
        </Setter.Value>
    </Setter>
    <Setter Property="Icon">
        <Setter.Value>
            <Image Width="32" Height="32" Source="{Binding Path=Icon}" />
        </Setter.Value>
    </Setter>
    <Setter Property="ItemContainerStyle" Value="{StaticResource SubMenuItemStyle}" />
</Style>

主应用程序的上下文菜单是这样创建的,datacontext设置为扩展本身:

foreach (var extension in this.Extensions)
{
    var extensionMenuItem = new MenuItem
        {
            DataContext = extension,
            Header = extension.Name,
        };

    foreach (var menuItem in extension.MenuItems)
    {
        var mi = new MenuItem
        {
            DataContext = menuItem,
            Header = menuItem.Name,
            Tag = menuItem,
        };

        mi.Click += CommonEventHandler;

        extensionMenuItem.Items.Add(mi);
    }

    this.ExtensionMenuItems.Add(extensionMenuItem);
}

在插件中使用以下语法分配图标:

this.Icon = new BitmapImage(new Uri("/QuickNote;component/Images/App.png", UriKind.RelativeOrAbsolute));

运行应用程序时,并非所有图标都会显示。显示的唯一图标似乎是最后添加的图标。这也适用于每个插件的子菜单 - 最后一个子菜单显示它的图标。

如果我显示带有图标的扩展程序的子菜单,那么还会出现一种奇怪的行为,然后显示另一个未获得的扩展程序的子菜单是否显示图标,然后返回到工作状态 - 然后图标消失了。

有关如何解决此问题的任何建议都将非常感激。

提前致谢

0 个答案:

没有答案