我正在开发一个简单的插件加载器(基于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));
运行应用程序时,并非所有图标都会显示。显示的唯一图标似乎是最后添加的图标。这也适用于每个插件的子菜单 - 最后一个子菜单显示它的图标。
如果我显示带有图标的扩展程序的子菜单,那么还会出现一种奇怪的行为,然后显示另一个未获得的扩展程序的子菜单是否显示图标,然后返回到工作状态 - 然后图标消失了。
有关如何解决此问题的任何建议都将非常感激。
提前致谢