菜单项的图标在WPF菜单消失

问题描述:

我有这样的XAML从我的视图模型渲染菜单:菜单项的图标在WPF菜单消失

<DockPanel> 
    <Menu DockPanel.Dock="Top" ItemsSource="{Binding MenuItems}"> 
     <Menu.Resources> 
      <SolidColorBrush x:Key="ImageBrush" Color="Blue"/> 

      <HierarchicalDataTemplate DataType="{x:Type local:MenuItemViewModel}" ItemsSource="{Binding Path=ChildMenuItems}"> 
       <HierarchicalDataTemplate.ItemContainerStyle> 
        <Style TargetType="MenuItem"> 
         <Setter Property="Command" Value="{Binding Command}" /> 
         <Setter Property="Icon"> 
          <Setter.Value> 
           <Image Source="{Binding Path=Icon, Converter={fa:ImageSourceConverter}, ConverterParameter={StaticResource ImageBrush}}" /> 
          </Setter.Value> 
         </Setter> 
        </Style> 
       </HierarchicalDataTemplate.ItemContainerStyle> 
       <StackPanel Orientation="Horizontal"> 
        <Label Content="{Binding Header}" /> 
       </StackPanel> 
      </HierarchicalDataTemplate> 
     </Menu.Resources> 
    </Menu> 
</DockPanel> 

所有作品,除了图标第一个菜单打开后消失的罚款。假设我有两个菜单,每个菜单都有一个子菜单,我打开菜单'A',子菜单显示图标。然后我打开菜单'B',子菜单显示图标。然后再次打开菜单'A',子菜单不显示图标。菜单'B'中只有子菜单显示它的图标。

Image是一个Control它只能有一个父母,所以你会看到这种行为。创建资源并设置Image控制与x:Shared XAML属性的非共享:

<Menu DockPanel.Dock="Top" ItemsSource="{Binding MenuItems}"> 
      <Menu.Resources> 
       <SolidColorBrush x:Key="ImageBrush" Color="Blue"/> 
       <Image x:Key="menuIcon" x:Shared="false" Source="{Binding Path=Icon, Converter={fa:ImageSourceConverter}, ConverterParameter={StaticResource ImageBrush}}" /> 
       <HierarchicalDataTemplate DataType="{x:Type local:MenuItemViewModel}" ItemsSource="{Binding Path=ChildMenuItems}"> 
        <HierarchicalDataTemplate.ItemContainerStyle> 
         <Style TargetType="MenuItem"> 
          <Setter Property="Command" Value="{Binding Command}" /> 
          <Setter Property="Icon" Value="{StaticResource menuIcon}" /> 
         </Style> 
        </HierarchicalDataTemplate.ItemContainerStyle> 
        <StackPanel Orientation="Horizontal"> 
         <Label Content="{Binding Header}" /> 
        </StackPanel> 
       </HierarchicalDataTemplate> 
      </Menu.Resources> 
     </Menu> 

检查我的样本here

+0

陈:谢谢你,问题解决了! – Andreas

+0

@Andreas欢迎:) –