2015-11-19 57 views
1

我有兩個Context Menus像下面,兩者都具有不同的控制的相同syntax且資源。兩個上下文菜單分享圖標,但只有一個上下文菜單圖標顯示

<ContextMenu ItemsSource="{Binding Actions}"> 
     <ContextMenu.ItemContainerStyle> 
      <Style TargetType="{x:Type MenuItem}" BasedOn="{StaticResource MetroMenuItem}"> 
       <Setter Property="Header" Value="{Binding Title}"/> 
       <Setter Property="ToolTip" Value="{Binding ToolTips}"/> 
       <Setter Property="Command" Value="{Binding Command}"/> 
       <Setter Property="Icon" Value="{Binding Icon}"/> 
       <Setter Property="CommandParameter" Value="{Binding CommandParameter}"/> 
      </Style> 
     </ContextMenu.ItemContainerStyle> 
    </ContextMenu> 

所有的工作正常,但只有問題與圖標。

視圖模型

我有一個像下面的屬性,

public Image Icon 
    { 
     get { return _Icon; } 
     set{ _Icon = value; NotifyPropertyChanged(); } 
    } 

我初始化它像下面,

Icon = new Image 
     { 
      Source = new BitmapImage(new Uri(@"../images/ReIndex.png", UriKind.Relative)), 
      Height = 20, 
      Width = 20, 
      Margin = new Thickness(5) 
     }; 

的問題是,如果一個上下文菜單中顯示的圖標另一個不會。

我知道MenuItem.IconObject。所以我試圖直接使用BitmapImage而不是Image,但仍然有問題。


編輯/解決

添加類似下面的資源,

<Control.Resources>   
    <Image x:Shared="False" x:Key="Icon" Source="{Binding Icon}" Height="20" Width="20"/> 
</Control.Resources> 

然後我的上下文菜單看起來像下面,

<ContextMenu ItemsSource="{Binding Actions}"> 
    <ContextMenu.ItemContainerStyle> 
     <Style TargetType="{x:Type MenuItem}" BasedOn="{StaticResource MetroMenuItem}"> 
      <Setter Property="Header" Value="{Binding Title}"/> 
      <Setter Property="ToolTip" Value="{Binding ToolTips}"/> 
      <Setter Property="Command" Value="{Binding Command}"/> 
      <Setter Property="Icon" Value="{StaticResource Icon}"/> 
      <Setter Property="CommandParameter" Value="{Binding CommandParameter}"/> 
     </Style> 
    </ContextMenu.ItemContainerStyle> 
</ContextMenu> 

視圖模型現在

public BitmapImage Icon 
{ 
    get { return _Icon; } 
    set{ _Icon = value; NotifyPropertyChanged(); } 
} 

Icon = new BitmapImage(new Uri(@"../images/Pencil-01.png", UriKind.Relative)); 

要點是x:Shared="False"Image控制。

如果有任何其他好的解決方案表示讚賞。

回答

0

添加類似下面的資源,

<Control.Resources>   
    <Image x:Shared="False" x:Key="Icon" Source="{Binding Icon}" Height="20" Width="20"/> 
</Control.Resources> 

然後我的上下文菜單看起來像下面,

<ContextMenu ItemsSource="{Binding Actions}"> 
    <ContextMenu.ItemContainerStyle> 
     <Style TargetType="{x:Type MenuItem}" BasedOn="{StaticResource MetroMenuItem}"> 
      <Setter Property="Header" Value="{Binding Title}"/> 
      <Setter Property="ToolTip" Value="{Binding ToolTips}"/> 
      <Setter Property="Command" Value="{Binding Command}"/> 
      <Setter Property="Icon" Value="{StaticResource Icon}"/> 
      <Setter Property="CommandParameter" Value="{Binding CommandParameter}"/> 
     </Style> 
    </ContextMenu.ItemContainerStyle> 
</ContextMenu> 

視圖模型

public BitmapImage Icon 
{ 
    get { return _Icon; } 
    set{ _Icon = value; NotifyPropertyChanged(); } 
} 

Icon = new BitmapImage(new Uri(@"../images/Pencil-01.png", UriKind.Relative)); 

主要的一點是在Image控制x:Shared="False"