您的位置:首页 > 编程语言 > C#

c# WPF 代码添加右键菜单

2017-11-17 13:32 399 查看
//WPF 代码添加右键菜单

ContextMenu MapContextMenu = new ContextMenu();

MapContextMenu.SetValue(ContextMenu.StyleProperty, Application.Current.Resources["DefaultContextMenu"]);

//设置菜单样式;DefaultContextMenu(资源文件中的菜单style)

MenuItem Edit= new MenuItem();//菜单项

Edit.Icon = null;

Edit.Click += new System.Windows.RoutedEventHandler(Edit_Click);

Edit.Header = "编辑";

MapContextMenu.Items.Add(Edit);

MenuItem Save= new MenuItem();

Save.Icon = null;

Save.Header = "保存";

Save.Click += new RoutedEventHandler(Save_Click);

Edit.Items.Add(Save);//编辑下的二级菜单

MapContextMenu.IsOpen=true;//控制菜单显示


<!--<ContextMenu>样式-->
<Style x:Key="MenuItemStyle" TargetType="{x:Type MenuItem}">
<Setter Property="BorderBrush" Value="#3061ab"/>
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="Background" Value="White"/>
<Setter Property="Foreground" Value="White"/>
<Setter Property="FontSize" Value="12"/>
<Setter Property="Height" Value="28"/>
<Setter Property="Width" Value="120"/>
<Setter Property="Margin" Value="1"/>
<Setter Property="Template" >
<Setter.Value>
<ControlTemplate TargetType="{x:Type MenuItem}">
<Border x:Name="border" Background="Transparent" Height="{TemplateBinding Height}" Opacity="1">
<Grid VerticalAlignment="Center" Margin="{TemplateBinding Margin}">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="7"/>
<ColumnDefinition Width="100" SharedSizeGroup="MenuTextColumnGroup"></ColumnDefinition>

<ColumnDefinition Width="13" x:Name="arrow_col"  SharedSizeGroup="MenuItemArrow"></ColumnDefinition>
</Grid.ColumnDefinitions>
<ContentPresenter Grid.Column="1" x:Name="txtHeader" MinWidth="90" RecognizesAccessKey="True" VerticalAlignment="Center" ContentSource="Header"/>

<TextBlock Grid.Column="2" x:Name="PART_Arrow"  Foreground="{TemplateBinding Foreground}" Width="10" Height="15"  HorizontalAlignment="Right">
<TextBlock.Background>
<ImageBrush ImageSource="/Resources/Images/UserControlImage/ChildMenu.png" />
</TextBlock.Background>
</TextBlock>
<!--淡出子集菜单容器-->
<Popup x:Name="SubMenuPopup" AllowsTransparency="true" IsOpen="{Binding IsSubmenuOpen, RelativeSource={RelativeSource TemplatedParent}}"
Placement="Bottom"  Focusable="false" VerticalOffset="0"
PopupAnimation="{DynamicResource {x:Static SystemParameters.MenuPopupAnimationKey}}">
<Border Background="{TemplateBinding Background}"  CornerRadius="0" Margin="5"
BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}">
<Grid x:Name="SubMenu" Grid.IsSharedSizeScope="True">
<StackPanel Margin="0" IsItemsHost="True" KeyboardNavigation.DirectionalNavigation="Cycle"/>
</Grid>
</Border>
</Popup>
</Grid>
</Border>
<!--触发器-->
<ControlTemplate.Triggers>
<!--TopLevelHeader:第一级菜单(有子菜单)-->
<Trigger Property="Role" Value="TopLevelHeader">
<Setter Property="Visibility" Value="Collapsed" TargetName="PART_Arrow"/>
<Setter Property="Margin" Value="1,1,6,1" TargetName="txtHeader"/>
<Setter Property="MinWidth" Value="10" TargetName="txtHeader"/>
<Setter Property="Width" Value="0" TargetName="arrow_col"/>
</Trigger>
<!--TopLevelItem 第一级菜单(无子级)-->
<Trigger Property="Role" Value="TopLevelItem">
<Setter Property="Visibility" Value="Collapsed" TargetName="PART_Arrow"/>
<Setter Property="Margin" Value="1,1,6,1" TargetName="txtHeader"/>
<Setter Property="MinWidth" Value="10" TargetName="txtHeader"/>
<Setter Property="Width" Value="0" TargetName="arrow_col"/>
</Trigger>
<!--SubmenuHeader:子菜单,有子菜单-->
<Trigger Property="Role" Value="SubmenuHeader">
<Setter Property="Visibility" Value="Visible" TargetName="PART_Arrow"/>
<Setter Property="Placement" Value="Right" TargetName="SubMenuPopup"/>
</Trigger>
<!--SubMenuItem:子菜单,无子级-->
<Trigger Property="Role" Value="SubMenuItem">
<Setter Property="Visibility" Value="Collapsed" TargetName="PART_Arrow"/>

</Trigger>
<!--选中状态,优先级将高于Icon-->

<Trigger Property="IsEnabled" Value="False">
<Setter TargetName="border" Value="{StaticResource DisableOpacity}" Property="Opacity"></Setter>
</Trigger>
<!--高亮状态-->
<Trigger Property="IsHighlighted" Value="true">
<Setter Property="Background" TargetName="border" Value="#01d6fe"></Setter>
<Setter Property="Foreground" Value="White"></Setter>
</Trigger>
<Trigger Property="IsPressed" Value="true">
<Setter Property="Background" TargetName="border" Value="#AA01d6fe"></Setter>
<Setter Property="Foreground" Value="White"></Setter>
</Trigger>
<!--子菜单打开状态-->
<Trigger Property="IsSubmenuOpen" Value="true" >
<Setter TargetName="PART_Arrow" Value="#AA01d6fe" Property="Foreground"></Setter>

</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>

<!--默认右键菜单ContextMenu样式-->
<Style x:Key="DefaultContextMenu" TargetType="{x:Type ContextMenu}">
<Setter Property="SnapsToDevicePixels" Value="True" />
<Setter Property="RenderOptions.ClearTypeHint" Value="Enabled" />
<Setter Property="TextOptions.TextFormattingMode" Value="Ideal" />
<Setter Property="BorderBrush" Value="#3061ab"/>
<Setter Property="Background" Value="#DD3061ab"/>
<Setter Property="BorderThickness" Value="1" />
<Setter Property="Foreground" Value="White"/>
<Setter Property="OverridesDefaultStyle" Value="True" />
<Setter Property="Grid.IsSharedSizeScope" Value="True" />
<Setter Property="HasDropShadow" Value="True" />
<Setter Property="ItemContainerStyle" Value="{StaticResource MenuItemStyle}"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ContextMenu}">
<Grid>
<Border x:Name="Border" BorderBrush="{TemplateBinding BorderBrush}" Margin="5"
BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}"

a072
Padding="{TemplateBinding Padding}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}">
<ItemsPresenter x:Name="ItemsPresenter" KeyboardNavigation.DirectionalNavigation="Cycle"
Grid.IsSharedSizeScope="True" Margin="0" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"
KeyboardNavigation.TabNavigation="Cycle" />
</Border>
</Grid>
<ControlTemplate.Triggers>

</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>

<Style x:Key="SecondMenuItemStyle" TargetType="{x:Type MenuItem}">
<Setter Property="BorderBrush" Value="#3061ab"/>
<Setter Property="BorderThickness" Value="0"/>
<Setter Property="Background" Value="White"/>
<Setter Property="Foreground" Value="White"/>
<Setter Property="FontSize" Value="12"/>
<Setter Property="Height" Value="28"/>
<Setter Property="Width" Value="120"/>

<Setter Property="Template" >
<Setter.Value>
<ControlTemplate TargetType="{x:Type MenuItem}">
<Border x:Name="border" Background="Transparent" Height="{TemplateBinding Height}" Opacity="1">
<Grid VerticalAlignment="Center" >
<Grid.ColumnDefinitions>
<ColumnDefinition Width="20"/>
<ColumnDefinition Width="100" SharedSizeGroup="MenuTextColumnGroup"></ColumnDefinition>

</Grid.ColumnDefinitions>
<ContentPresenter Grid.Column="1" x:Name="txtHeader" MinWidth="90" RecognizesAccessKey="True" VerticalAlignment="Center" ContentSource="Header"/>

<!--淡出子集菜单容器-->
<Popup x:Name="SubMenuPopup" AllowsTransparency="true" IsOpen="{Binding IsSubmenuOpen, RelativeSource={RelativeSource TemplatedParent}}"
Placement="Bottom"  Focusable="false" VerticalOffset="0"
PopupAnimation="{DynamicResource {x:Static SystemParameters.MenuPopupAnimationKey}}">
<Border Background="{TemplateBinding Background}"  CornerRadius="0" Margin="5"
BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}">
<Grid x:Name="SubMenu" Grid.IsSharedSizeScope="True">
<StackPanel Margin="0" IsItemsHost="True" KeyboardNavigation.DirectionalNavigation="Cycle"/>
</Grid>
</Border>
</Popup>
</Grid>
</Border>
<!--触发器-->
<ControlTemplate.Triggers>

<!--SubMenuItem:子菜单,无子级-->
<Trigger Property="Role" Value="SubMenuItem">

<Setter Property="Background" Value="#DD3061ab" TargetName="border"/>
</Trigger>
<!--选中状态,优先级将高于Icon-->

<Trigger Property="IsEnabled" Value="False">
<Setter TargetName="border" Value="{StaticResource DisableOpacity}" Property="Opacity"></Setter>
</Trigger>
<!--高亮状态-->
<Trigger Property="IsHighlighted" Value="true">
<Setter Property="Background" TargetName="border" Value="#01d6fe"></Setter>
<Setter Property="Foreground" Value="White"></Setter>
</Trigger>
<Trigger Property="IsPressed" Value="true">
<Setter Property="Background" TargetName="border" Value="#AA01d6fe"></Setter>
<Setter Property="Foreground" Value="White"></Setter>
</Trigger>

</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>


`
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  contextmenu wpf