WPF – MenuItem缺少图标/图像

我得到menuItem图标只出现在最后一个menuItem上。 如果我只是窥探应用程序最后一个menuItem图标中有图像,而如果我调试所有MenuItems似乎有图标中的图像。 此外,如果我添加submenuItem一旦我打开子菜单,menuItem上的图标消失,最后一个子菜单获取图标…任何想法? PS:菜单项上的工具提示也不起作用。 我使用caliburn微型和流畅的色带控制。

                        

您正在将Icon属性设置为StyleImage控件。 现在,只创建了一个Style副本,因此只创建了一个Image副本。 现在,任何控件一次只能有一个父级。 因此,当它被分配给最后一个MenuItem ,它将从以前的MenuItem控件中删除。 要解决此问题,请使用Templates

而不是设置Header属性,设置HeaderTemplate

                

我不确定您使用的控件工具包公开了哪些属性。 但是,我确信他们必须拥有模板属性。

执行此操作后,您无需在样式中设置Icon属性。

像这样工作:

                     

我成功地在ResourceDictionary中使用以下条目:

        

出于某种原因,当Image是静态资源x时,方法是:Shared = false对我不起作用。 只有最后一个菜单项显示图标。 我已经尝试过StaticResource和DynamicResource。 这是我的解决方案:

 public class MenuItemIconHelper { #region ImageSource Icon public static readonly DependencyProperty IconProperty = DependencyProperty.RegisterAttached("Icon", typeof(ImageSource), typeof(MenuItemIconHelper), new PropertyMetadata(default(ImageSource), IconPropertyChangedCallback)); private static void IconPropertyChangedCallback(DependencyObject obj, DependencyPropertyChangedEventArgs e) { var i = (MenuItem)obj; if (e.NewValue != null) i.Icon = new Image() {Source = (ImageSource)e.NewValue}; else i.Icon = null; } public static void SetIcon(DependencyObject element, ImageSource value) { element.SetValue(IconProperty, value); } public static ImageSource GetIcon(DependencyObject element) { return (ImageSource)element.GetValue(IconProperty); } #endregion } 

样品:

  

我认为它比使用资源更具可读性,您不需要更改MenuItem的HeaderTemplate。 您还可以为ImageSource或Image实现一些缓存机制。