Skip to content

Commit 429dd09

Browse files
committed
add context menu, fixes #149
1 parent df74ca7 commit 429dd09

File tree

4 files changed

+81
-4
lines changed

4 files changed

+81
-4
lines changed

MainDemo.Wpf/MenusAndToolBars.xaml

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,5 +136,22 @@
136136
</Menu>
137137
</ToolBar>
138138
</ToolBarTray>
139+
140+
<TextBox Margin="16" VerticalAlignment="Top" HorizontalAlignment="Left">
141+
With Default Context Menu
142+
</TextBox>
143+
144+
<TextBox Margin="16" VerticalAlignment="Top" HorizontalAlignment="Left">
145+
<TextBox.ContextMenu>
146+
<ContextMenu>
147+
<MenuItem Header="Hello World" />
148+
<MenuItem Header="Clickety Click">
149+
<MenuItem Header="Clackety Clack" />
150+
</MenuItem>
151+
</ContextMenu>
152+
</TextBox.ContextMenu>
153+
With Custom Context Menu
154+
</TextBox>
155+
139156
</DockPanel>
140157
</UserControl>

MaterialDesignThemes.Wpf/Themes/MaterialDesignTheme.Defaults.xaml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,8 @@
3535
<Style TargetType="{x:Type Button}" BasedOn="{StaticResource MaterialDesignRaisedButton}" />
3636
<Style TargetType="{x:Type Calendar}" BasedOn="{StaticResource MaterialDesignCalendarPortrait}" />
3737
<Style TargetType="{x:Type CheckBox}" BasedOn="{StaticResource MaterialDesignCheckBox}" />
38-
<Style TargetType="{x:Type ComboBox}" BasedOn="{StaticResource MaterialDesignComboBox}" />
38+
<Style TargetType="{x:Type ComboBox}" BasedOn="{StaticResource MaterialDesignComboBox}" />
39+
<Style TargetType="{x:Type ContextMenu}" BasedOn="{StaticResource MaterialDesignContextMenu}" />
3940
<Style TargetType="{x:Type DataGrid}" BasedOn="{StaticResource MaterialDesignDataGrid}" />
4041
<Style TargetType="{x:Type DataGridCell}" BasedOn="{StaticResource MaterialDesignDataGridCell}" />
4142
<Style TargetType="{x:Type DataGridColumnHeader}" BasedOn="{StaticResource MaterialDesignDataGridColumnHeader}" />

MaterialDesignThemes.Wpf/Themes/MaterialDesignTheme.Menu.xaml

Lines changed: 28 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,15 +22,15 @@
2222
</Setter>
2323
</Style>
2424

25-
<Style x:Key="MaterialDesignMenu" TargetType="{x:Type Menu}">
25+
<Style x:Key="MaterialDesignMenu" TargetType="{x:Type MenuBase}">
2626
<Setter Property="Background" Value="{DynamicResource MaterialDesignPaper}"/>
2727
<Setter Property="FontFamily" Value="pack://application:,,,/MaterialDesignThemes.Wpf;component/Resources/Roboto/#Roboto"/>
2828
<Setter Property="Foreground" Value="{DynamicResource MaterialDesignBody}"/>
2929
<Setter Property="TextBlock.FontSize" Value="15"/>
3030
<Setter Property="VerticalContentAlignment" Value="Center"/>
3131
<Setter Property="Template">
3232
<Setter.Value>
33-
<ControlTemplate TargetType="{x:Type Menu}">
33+
<ControlTemplate TargetType="{x:Type MenuBase}">
3434
<Border BorderBrush="{TemplateBinding BorderBrush}"
3535
BorderThickness="{TemplateBinding BorderThickness}"
3636
Background="{TemplateBinding Background}"
@@ -43,6 +43,31 @@
4343
</Setter>
4444
</Style>
4545

46+
<Style x:Key="MaterialDesignContextMenu" TargetType="{x:Type ContextMenu}" BasedOn="{StaticResource MaterialDesignMenu}">
47+
<Setter Property="Template">
48+
<Setter.Value>
49+
<ControlTemplate TargetType="{x:Type MenuBase}">
50+
<Border Background="{TemplateBinding Background}"
51+
Effect="{DynamicResource MaterialDesignShadowDepth1}"
52+
Margin="3"
53+
CornerRadius="2">
54+
<Border Background="Transparent">
55+
<ScrollViewer x:Name="SubMenuScrollViewer" Style="{DynamicResource {ComponentResourceKey ResourceId=MenuScrollViewer, TypeInTargetAssembly={x:Type FrameworkElement}}}">
56+
<Grid RenderOptions.ClearTypeHint="Enabled" Margin="0 16">
57+
<ItemsPresenter x:Name="ItemsPresenter"
58+
KeyboardNavigation.DirectionalNavigation="Cycle"
59+
Grid.IsSharedSizeScope="True"
60+
SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"
61+
KeyboardNavigation.TabNavigation="Cycle"/>
62+
</Grid>
63+
</ScrollViewer>
64+
</Border>
65+
</Border>
66+
</ControlTemplate>
67+
</Setter.Value>
68+
</Setter>
69+
</Style>
70+
4671
<Style TargetType="{x:Type MenuItem}" x:Key="MaterialDesignMenuItem" BasedOn="{x:Null}">
4772
<Setter Property="Padding" Value="24 0 24 0"></Setter>
4873
<Setter Property="OverridesDefaultStyle" Value="True"/>
@@ -147,7 +172,7 @@
147172
PopupAnimation="Slide"
148173
Placement="Bottom">
149174
<Border x:Name="SubMenuBorder"
150-
Background="{Binding Path=Background, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Menu}}"
175+
Background="{Binding Path=Background, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=MenuBase}}"
151176
Effect="{DynamicResource MaterialDesignShadowDepth1}"
152177
CornerRadius="2">
153178
<Border Background="Transparent">

MaterialDesignThemes.Wpf/Themes/MaterialDesignTheme.TextBox.xaml

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,40 @@
2424
<Setter Property="ScrollViewer.PanningMode" Value="VerticalFirst"/>
2525
<Setter Property="Stylus.IsFlicksEnabled" Value="False"/>
2626
<Setter Property="Validation.ErrorTemplate" Value="{StaticResource MaterialDesignValidationErrorTemplate}"/>
27+
<!-- cludge the default context menu -->
28+
<Setter Property="ContextMenu">
29+
<Setter.Value>
30+
<ContextMenu>
31+
<MenuItem Header="_Cut" Command="Cut">
32+
<MenuItem.Icon>
33+
<Viewbox Width="16" Height="16">
34+
<Canvas Width="24" Height="24">
35+
<Path Data="M19,3L13,9L15,11L22,4V3M12,12.5A0.5,0.5 0 0,1 11.5,12A0.5,0.5 0 0,1 12,11.5A0.5,0.5 0 0,1 12.5,12A0.5,0.5 0 0,1 12,12.5M6,20A2,2 0 0,1 4,18C4,16.89 4.9,16 6,16A2,2 0 0,1 8,18C8,19.11 7.1,20 6,20M6,8A2,2 0 0,1 4,6C4,4.89 4.9,4 6,4A2,2 0 0,1 8,6C8,7.11 7.1,8 6,8M9.64,7.64C9.87,7.14 10,6.59 10,6A4,4 0 0,0 6,2A4,4 0 0,0 2,6A4,4 0 0,0 6,10C6.59,10 7.14,9.87 7.64,9.64L10,12L7.64,14.36C7.14,14.13 6.59,14 6,14A4,4 0 0,0 2,18A4,4 0 0,0 6,22A4,4 0 0,0 10,18C10,17.41 9.87,16.86 9.64,16.36L12,14L19,21H22V20L9.64,7.64Z" Fill="{DynamicResource MaterialDesignBody}" />
36+
</Canvas>
37+
</Viewbox>
38+
</MenuItem.Icon>
39+
</MenuItem>
40+
<MenuItem Header="_Copy" Command="Copy">
41+
<MenuItem.Icon>
42+
<Viewbox Width="16" Height="16">
43+
<Canvas Width="24" Height="24">
44+
<Path Data="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z" Fill="{DynamicResource MaterialDesignBody}" />
45+
</Canvas>
46+
</Viewbox>
47+
</MenuItem.Icon>
48+
</MenuItem>
49+
<MenuItem Header="_Paste" Command="Paste">
50+
<MenuItem.Icon>
51+
<Viewbox Width="16" Height="16">
52+
<Canvas Width="24" Height="24">
53+
<Path Data="M19,20H5V4H7V7H17V4H19M12,2A1,1 0 0,1 13,3A1,1 0 0,1 12,4A1,1 0 0,1 11,3A1,1 0 0,1 12,2M19,2H14.82C14.4,0.84 13.3,0 12,0C10.7,0 9.6,0.84 9.18,2H5A2,2 0 0,0 3,4V20A2,2 0 0,0 5,22H19A2,2 0 0,0 21,20V4A2,2 0 0,0 19,2Z" Fill="{DynamicResource MaterialDesignBody}" />
54+
</Canvas>
55+
</Viewbox>
56+
</MenuItem.Icon>
57+
</MenuItem>
58+
</ContextMenu>
59+
</Setter.Value>
60+
</Setter>
2761
<Setter Property="Template">
2862
<Setter.Value>
2963
<ControlTemplate TargetType="{x:Type TextBox}">

0 commit comments

Comments
 (0)