Ich hab hier in WPF ein Kontextmenü, das so definiert ist:
Spoiler anzeigen
Das angegebene Template sieht so aus:
Spoiler anzeigen
Warum sieht das ContextMenu jetzt so aus:
und weshalb wird das Untermenü bei Settings nicht mehr geöffnet?
(Tl;dr: Wie style ich ein ContextMenu in WPF korrekt?)
XML-Quellcode
- <ContextMenu>
- <MenuItem Click="AdjustClicked" Header="Adjust Color" Template="{StaticResource MenuItemTemplate}">
- <MenuItem.Icon>
- <Image Height="16" Width="16" Source="/AeroAdjuster;component/Icons/monitor-wallpaper.png" />
- </MenuItem.Icon>
- </MenuItem>
- <MenuItem Header="Settings" Template="{StaticResource MenuItemTemplate}">
- <MenuItem.Icon>
- <Image Height="16" Width="16" Source="/AeroAdjuster;component/Icons/gear.png" />
- </MenuItem.Icon>
- <MenuItem Click="ShowSettings" Header="Soup Rice" Template="{StaticResource MenuItemTemplate}">
- <MenuItem.Icon>
- <Image Height="16" Width="16" Source="/AeroAdjuster;component/Icons/gear.png" />
- </MenuItem.Icon>
- </MenuItem>
- </MenuItem>
- <Separator />
- <MenuItem Click="BuyMeACoffee" Header="Buy me a coffee :)" Template="{StaticResource MenuItemTemplate}">
- <MenuItem.Icon>
- <Image Height="16" Width="16" Source="/AeroAdjuster;component/Icons/cup.png" />
- </MenuItem.Icon>
- </MenuItem>
- <Separator />
- <MenuItem Click="ShowAbout" Header="About" Template="{StaticResource MenuItemTemplate}">
- <MenuItem.Icon>
- <Image Height="16" Width="16" Source="/AeroAdjuster;component/Icons/robot.png" />
- </MenuItem.Icon>
- </MenuItem>
- <MenuItem Click="CloseApp" Header="Close" Template="{StaticResource MenuItemTemplate}">
- <MenuItem.Icon>
- <Image Height="16" Width="16" Source="/AeroAdjuster;component/Icons/close.png" />
- </MenuItem.Icon>
- </MenuItem>
- </ContextMenu>
Das angegebene Template sieht so aus:
XML-Quellcode
- <ControlTemplate x:Key="MenuItemTemplate" TargetType="MenuItem" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mwt="clr-namespace:Microsoft.Windows.Themes;assembly=PresentationFramework.Aero">
- <Grid SnapsToDevicePixels="True">
- <Rectangle RadiusX="2" RadiusY="2" Fill="{TemplateBinding Panel.Background}" Stroke="{TemplateBinding Border.BorderBrush}" StrokeThickness="1" Name="Bg" />
- <Rectangle RadiusX="2" RadiusY="2" Stroke="#00FFFFFF" StrokeThickness="1" Name="InnerBorder" Margin="1,1,1,1" />
- <Grid>
- <Grid.ColumnDefinitions>
- <ColumnDefinition Width="Auto" MinWidth="24" SharedSizeGroup="MenuItemIconColumnGroup" />
- <ColumnDefinition Width="4" />
- <ColumnDefinition Width="*" />
- <ColumnDefinition Width="37" />
- <ColumnDefinition Width="Auto" SharedSizeGroup="MenuItemIGTColumnGroup" />
- <ColumnDefinition Width="17" />
- </Grid.ColumnDefinitions>
- <ContentPresenter Content="{TemplateBinding MenuItem.Icon}" ContentSource="Icon" Name="Icon" Margin="1,1,1,1" VerticalAlignment="Center" SnapsToDevicePixels="{TemplateBinding UIElement.SnapsToDevicePixels}" />
- <Border BorderThickness="1,1,1,1" CornerRadius="3,3,3,3" BorderBrush="#FFCDD3E6" Background="#FFE6EFF4" Name="GlyphPanel" Width="22" Height="22" Margin="1,1,1,1" Visibility="Hidden"><Path Data="M0,5.1L1.7,5.2 3.4,7.1 8,0.4 9.2,0 3.3,10.8z" Fill="#FF0C12A1" Name="Glyph" Width="9" Height="11" FlowDirection="LeftToRight" />
- </Border>
- <ContentPresenter RecognizesAccessKey="True" Content="{TemplateBinding HeaderedContentControl.Header}" ContentTemplate="{TemplateBinding HeaderedContentControl.HeaderTemplate}" ContentStringFormat="{TemplateBinding HeaderedItemsControl.HeaderStringFormat}" ContentSource="Header" Margin="{TemplateBinding Control.Padding}" SnapsToDevicePixels="{TemplateBinding UIElement.SnapsToDevicePixels}" Grid.Column="2" />
- <TextBlock Text="{TemplateBinding MenuItem.InputGestureText}" Margin="{TemplateBinding Control.Padding}" Visibility="Collapsed" Grid.Column="4" />
- <Path Data="M0,0L4,3.5 0,7z" Fill="{TemplateBinding TextElement.Foreground}" Margin="4,0,0,0" VerticalAlignment="Center" Grid.Column="5" />
- </Grid>
- <Popup IsOpen="False" Placement="Right" HorizontalOffset="-2" VerticalOffset="-3" PopupAnimation="{DynamicResource {x:Static SystemParameters.MenuPopupAnimationKey}}" AllowsTransparency="True" Name="PART_Popup" Focusable="False">
- <mwt:SystemDropShadowChrome Color="#00FFFFFF" Name="Shdw">
- <Border BorderThickness="1,1,1,1" BorderBrush="#FF959595" Background="#FFF5F5F5" Name="SubMenuBorder">
- <ScrollViewer Style="{DynamicResource {ComponentResourceKey TypeInTargetAssembly=FrameworkElement, ResourceId=MenuScrollViewer}}" Name="SubMenuScrollViewer" Margin="1,0,1,0">
- <Grid RenderOptions.ClearTypeHint="Enabled">
- <Canvas Width="0" Height="0" HorizontalAlignment="Left" VerticalAlignment="Top">
- <Rectangle Fill="#FFF5F5F5" Name="OpaqueRect" Width="Auto" Height="Auto" />
- </Canvas>
- <Rectangle RadiusX="2" RadiusY="2" Fill="#FFF1F1F1" Width="28" Margin="1,2,1,2" HorizontalAlignment="Left" />
- <Rectangle Fill="#FFE2E3E3" Width="1" Margin="29,2,0,2" HorizontalAlignment="Left" />
- <Rectangle Fill="#FFFFFFFF" Width="1" Margin="30,2,0,2" HorizontalAlignment="Left" />
- <ItemsPresenter Name="ItemsPresenter" Margin="2,2,2,2" SnapsToDevicePixels="{TemplateBinding UIElement.SnapsToDevicePixels}" KeyboardNavigation.TabNavigation="Cycle" KeyboardNavigation.DirectionalNavigation="Cycle" Grid.IsSharedSizeScope="True" />
- </Grid>
- </ScrollViewer>
- </Border>
- </mwt:SystemDropShadowChrome>
- </Popup>
- </Grid>
- <ControlTemplate.Triggers>
- <Trigger Property="MenuItem.IsSuspendingPopupAnimation">
- <Setter Property="Popup.PopupAnimation" TargetName="PART_Popup">
- <Setter.Value>
- <x:Static Member="PopupAnimation.None" />
- </Setter.Value>
- </Setter>
- <Trigger.Value>
- <s:Boolean>True</s:Boolean>
- </Trigger.Value>
- </Trigger>
- <Trigger Property="MenuItem.IsHighlighted">
- <Setter Property="Shape.Stroke" TargetName="InnerBorder">
- <Setter.Value>
- <SolidColorBrush>#D1DBF4FF</SolidColorBrush>
- </Setter.Value>
- </Setter>
- <Trigger.Value>
- <s:Boolean>True</s:Boolean>
- </Trigger.Value>
- </Trigger>
- <Trigger Property="MenuItem.Icon">
- <Setter Property="UIElement.Visibility" TargetName="Icon">
- <Setter.Value>
- <x:Static Member="Visibility.Collapsed" />
- </Setter.Value>
- </Setter>
- <Trigger.Value>
- <x:Null />
- </Trigger.Value>
- </Trigger>
- <Trigger Property="MenuItem.IsChecked">
- <Setter Property="UIElement.Visibility" TargetName="GlyphPanel">
- <Setter.Value>
- <x:Static Member="Visibility.Visible" />
- </Setter.Value>
- </Setter>
- <Setter Property="UIElement.Visibility" TargetName="Icon">
- <Setter.Value>
- <x:Static Member="Visibility.Collapsed" />
- </Setter.Value>
- </Setter>
- <Trigger.Value>
- <s:Boolean>True</s:Boolean>
- </Trigger.Value>
- </Trigger>
- <Trigger Property="Popup.HasDropShadow" SourceName="PART_Popup">
- <Setter Property="FrameworkElement.Margin" TargetName="Shdw">
- <Setter.Value>
- <Thickness>0,0,5,5</Thickness>
- </Setter.Value>
- </Setter>
- <Setter Property="mwt:SystemDropShadowChrome.Color" TargetName="Shdw">
- <Setter.Value>
- <Color>#71000000</Color>
- </Setter.Value>
- </Setter>
- <Trigger.Value>
- <s:Boolean>True</s:Boolean>
- </Trigger.Value>
- </Trigger>
- <Trigger Property="MenuItem.IsHighlighted">
- <Setter Property="Shape.Fill" TargetName="Bg">
- <Setter.Value>
- <LinearGradientBrush StartPoint="0,0" EndPoint="0,1">
- <LinearGradientBrush.GradientStops>
- <GradientStop Color="#34C5EBFF" Offset="0" />
- <GradientStop Color="#3481D8FF" Offset="1" />
- </LinearGradientBrush.GradientStops>
- </LinearGradientBrush>
- </Setter.Value>
- </Setter>
- <Setter Property="Shape.Stroke" TargetName="Bg">
- <Setter.Value>
- <SolidColorBrush>#8571CBF1</SolidColorBrush>
- </Setter.Value>
- </Setter>
- <Trigger.Value>
- <s:Boolean>True</s:Boolean>
- </Trigger.Value>
- </Trigger>
- <Trigger Property="UIElement.IsEnabled">
- <Setter Property="TextElement.Foreground">
- <Setter.Value>
- <SolidColorBrush>#FF9A9A9A</SolidColorBrush>
- </Setter.Value>
- </Setter>
- <Setter Property="Panel.Background" TargetName="GlyphPanel">
- <Setter.Value>
- <SolidColorBrush>#FFEEE9E9</SolidColorBrush>
- </Setter.Value>
- </Setter>
- <Setter Property="Border.BorderBrush" TargetName="GlyphPanel">
- <Setter.Value>
- <SolidColorBrush>#FFDBD6D6</SolidColorBrush>
- </Setter.Value>
- </Setter>
- <Setter Property="Shape.Fill" TargetName="Glyph">
- <Setter.Value>
- <SolidColorBrush>#FF848589</SolidColorBrush>
- </Setter.Value>
- </Setter>
- <Trigger.Value>
- <s:Boolean>False</s:Boolean>
- </Trigger.Value>
- </Trigger>
- <Trigger Property="ScrollViewer.CanContentScroll" SourceName="SubMenuScrollViewer">
- <Setter Property="Canvas.Top" TargetName="OpaqueRect">
- <Setter.Value>
- <Binding Path="VerticalOffset" ElementName="SubMenuScrollViewer" />
- </Setter.Value>
- </Setter>
- <Setter Property="Canvas.Left" TargetName="OpaqueRect">
- <Setter.Value>
- <Binding Path="HorizontalOffset" ElementName="SubMenuScrollViewer" />
- </Setter.Value>
- </Setter>
- <Trigger.Value>
- <s:Boolean>False</s:Boolean>
- </Trigger.Value>
- </Trigger>
- </ControlTemplate.Triggers>
- </ControlTemplate>
Warum sieht das ContextMenu jetzt so aus:
und weshalb wird das Untermenü bei Settings nicht mehr geöffnet?
(Tl;dr: Wie style ich ein ContextMenu in WPF korrekt?)
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „nikeee13“ ()