2013-03-28 35 views
5

我有一個項目,我需要在我的WPF應用程序中定製上下文菜單,其中按鈕將放置在所有菜單項的底部。在WPF中自定義上下文菜單

但是,如果我要通過XAML添加按鈕,它將作爲上下文菜單中集合中的另一項顯示,並且鼠標懸停突出顯示將對其起作用。

我想將上下文菜單調整爲網格狀樣式,從而可以自定義其下的樣式。

任何想法如何實現這一點(最好在XAML中)?

回答

15

它在XAML中實際上非常簡單。 只需在要爲其創建上下文菜單的元素下定義它即可。

 <Border> 
      <Border.ContextMenu> 
       <ContextMenu> 
        <ContextMenu.Template> 
         <ControlTemplate> 
          <Grid> 
           <!--Put anything you want in here.--> 
          </Grid> 
         </ControlTemplate> 
        </ContextMenu.Template> 
       </ContextMenu> 
      </Border.ContextMenu> 
     </Border> 
+0

太棒了! +1正在尋找此 – VisualBean 2013-11-27 22:19:03

+0

完美工作! :) – 2017-10-09 05:36:06

4

對於你的菜單項的風格與您可以使用下面的代碼項目的按鈕:

注 - 添加項目到Header將保持在同一MenuItem,但如果添加到MenuItem只有它會被視爲新的MenuItem

<ContextMenu> 
    <ContextMenu.Items> 
     <MenuItem> 
      <MenuItem.Header> 
      <StackPanel> 
       <TextBlock Text="Item 1"/> 
       <Button Content="Button 1" Margin="5"/> 
      </StackPanel> 
      </MenuItem.Header> 
     </MenuItem> 
     <MenuItem> 
      <MenuItem.Header> 
      <StackPanel> 
       <TextBlock Text="Item 2"/> 
       <Button Content="Button 2" Margin="5"/> 
       </StackPanel> 
      </MenuItem.Header> 
      </MenuItem> 
    </ContextMenu.Items> 
</ContextMenu> 

這將是導致ContextMenu

enter image description here

從那裏,你可以風格的MenuItemButton

希望它能幫助!

1

可以與ContextMenu的例子風格/模板(從here)開始,並調整您的需求。

<Style TargetType="{x:Type ContextMenu}"> 
    <Setter Property="SnapsToDevicePixels" Value="True" /> 
    <Setter Property="OverridesDefaultStyle" Value="True" /> 
    <Setter Property="Grid.IsSharedSizeScope" Value="true" /> 
    <Setter Property="HasDropShadow" Value="True" /> 
    <Setter Property="Template"> 
    <Setter.Value> 
     <ControlTemplate TargetType="{x:Type ContextMenu}"> 
     <Border x:Name="Border" 
       Background="{StaticResource MenuPopupBrush}" 
       BorderThickness="1"> 
      <Border.BorderBrush> 
      <SolidColorBrush Color="{StaticResource BorderMediumColor}" /> 
      </Border.BorderBrush> 
      <StackPanel IsItemsHost="True" 
         KeyboardNavigation.DirectionalNavigation="Cycle" /> 
     </Border> 
     <ControlTemplate.Triggers> 
      <Trigger Property="HasDropShadow" Value="true"> 
      <Setter TargetName="Border" Property="Padding" Value="0,3,0,3" /> 
      <Setter TargetName="Border" Property="CornerRadius" Value="4" /> 
      </Trigger> 
     </ControlTemplate.Triggers> 
     </ControlTemplate> 
    </Setter.Value> 
    </Setter> 
</Style> 
+0

另請參閱https://msdn.microsoft.com/en-us/library/ms747082(v=vs.85).aspx用於設計'MenuItem'的樣式。 – 2016-06-20 20:37:46