2016-02-27 62 views
2

我正在使用MahApps Metro UI工具包编写WPF应用程序。通过ContextMenu使用MahApps图标

http://mahapps.com/guides/quick-start.html

从他们的网站上的指导,我已经基本完成我的应用程序,它看起来光滑。我唯一的问题是我一直无法知道如何使用它们提供的图标包作为contextmenu图标。

enter image description here

这里是什么,我试图做一个直观的例子。虽然我能够获得原始的“Windows”菜单项以显示它的图标,但我无法对contextmenu菜单项执行相同的操作。有什么我做错了或解决这个问题的方法吗?

这里是我的.xaml:

<Menu IsMainMenu="True"> 
    <MenuItem Header="_Windows" ContextMenuService.IsEnabled="False" Click="WindowsMenuItem_Click"> 
     <MenuItem.Icon> 
      <Rectangle Width="15" Height="15" Fill="{Binding RelativeSource={RelativeSource AncestorType=MenuItem}, Path=Foreground}"> 
       <Rectangle.OpacityMask> 
        <VisualBrush Stretch="Fill" Visual="{StaticResource appbar_window}" /> 
       </Rectangle.OpacityMask> 
      </Rectangle> 
     </MenuItem.Icon> 
     <MenuItem.ContextMenu> 
      <ContextMenu> 
       <MenuItem Header="_Welcome Module"> 
        <MenuItem.Icon> 
         <Rectangle Width="15" Height="15" Fill="{Binding RelativeSource={RelativeSource AncestorType=MenuItem}, Path=Foreground}"> 
          <Rectangle.OpacityMask> 
           <VisualBrush Stretch="Fill" Visual="{StaticResource appbar_home}" /> 
          </Rectangle.OpacityMask> 
         </Rectangle> 
        </MenuItem.Icon> 
       </MenuItem> 
       <MenuItem Header="_Schedule Module"> 
        <MenuItem.Icon> 
         <Rectangle Width="15" Height="15" Fill="{Binding RelativeSource={RelativeSource AncestorType=MenuItem}, Path=Foreground}"> 
          <Rectangle.OpacityMask> 
           <VisualBrush Stretch="Fill" Visual="{StaticResource appbar_calendar}" /> 
          </Rectangle.OpacityMask> 
         </Rectangle> 
        </MenuItem.Icon> 
       </MenuItem> 
       <MenuItem Header="_Performance Module"> 
        <MenuItem.Icon> 
         <Rectangle Width="15" Height="15" Fill="{Binding RelativeSource={RelativeSource AncestorType=MenuItem}, Path=Foreground}"> 
          <Rectangle.OpacityMask> 
           <VisualBrush Stretch="Fill" Visual="{StaticResource appbar_table}" /> 
          </Rectangle.OpacityMask> 
         </Rectangle> 
        </MenuItem.Icon> 
       </MenuItem> 
       <MenuItem Header="_Audit Module"> 
        <MenuItem.Icon> 
         <Rectangle Width="15" Height="15" Fill="{Binding RelativeSource={RelativeSource AncestorType=MenuItem}, Path=Foreground}"> 
          <Rectangle.OpacityMask> 
           <VisualBrush Stretch="Fill" Visual="{StaticResource appbar_graph_line}" /> 
          </Rectangle.OpacityMask> 
         </Rectangle> 
        </MenuItem.Icon> 
       </MenuItem> 
      </ContextMenu> 
     </MenuItem.ContextMenu> 
    </MenuItem> 
</Menu> 

而且我.xaml.cs:

public partial class MainWindow 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 
     DataContext = new MainWindowViewModel(); 
    } 

    private void WindowsMenuItem_Click(object sender, RoutedEventArgs e) 
    { 
     (sender as MenuItem).ContextMenu.IsEnabled = true; 
     (sender as MenuItem).ContextMenu.PlacementTarget = (sender as MenuItem); 
     (sender as MenuItem).ContextMenu.Placement = System.Windows.Controls.Primitives.PlacementMode.Bottom; 
     (sender as MenuItem).ContextMenu.IsOpen = true; 
    } 
} 

回答

5

我得到了它在我的应用程序运行使用:

<Window.Resources> 
    <ResourceDictionary> 
     <VisualBrush x:Key="RunAllTestsIcon" Visual="{StaticResource appbar_list_check}"/> 
    </ResourceDictionary> 
</Window.Resources> 
... 
<ContextMenu StaysOpen="True"> 
    <MenuItem Header="RunAllTests"> 
     <MenuItem.Icon> 
     <Rectangle Width="22" Height="22" Fill="{StaticResource RunAllTestsIcon}"/> 
     </MenuItem.Icon> 
    </MenuItem> 
</ContextMenu>