2016-06-11 3 views
1

У меня есть этот код XAML, чтобы оказать меню с моей точкой зрения модели:MenuItem Иконка в 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> 

Все работает отлично, за исключением того иконки исчезают после первого открытия меню. Допустим, у меня есть два меню с одним дочерним элементом каждый, я открываю меню «А», а дочернее меню показывает значок. Затем я открываю меню «B», а дочернее меню показывает значок. Затем снова открывается меню «A» и дочернее меню. Только дочернее меню в меню «B» показывает значок.

ответ

2

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

@ Прибытие приветствия :) –

Смежные вопросы