在项目过程中,有时系统提供的控件不好看,这时可能需要重写控件,也可以重新定义下控件的样式外观来达到要求,WPF就支持控件的自定义Style样式。
下面我就提供一个右键菜单的自定义style样式。
首先我做一个button,这个button有右键菜单,它的xaml代码如下:
<Button Margin="84,98,71,121" Name="button1" Content="ContextMenu Style">
<Button.ContextMenu>
<ContextMenu>
<MenuItem Header="1" >
<MenuItem.Icon>
<Image Width="20" Height="20" Source="./color.png" />
</MenuItem.Icon>
</MenuItem>
<MenuItem Header="2" >
</MenuItem>
<MenuItem Header="3" />
<Separator />
<MenuItem Header="4" >
</MenuItem>
<MenuItem Header="5" />
</ContextMenu>
</Button.ContextMenu>
</Button>
由于下面的style显示不全,现放上工程文件,文件位于attachments中,是个RAR文件。点击contextMenu.rar下载看看。
现把style的代码放上:
<!--自定义ContextMenu的外观样式-->
<Style TargetType="{x:Type ContextMenu}">
<Setter Property="SnapsToDevicePixels" Value="True"/>
<Setter Property="OverridesDefaultStyle" Value="True"/>
<Setter Property="Grid.IsSharedSizeScope" Value="True"/>
<Setter Property ="Focusable" Value="False"/>
<Setter Property="HasDropShadow" Value="True"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ContextMenu}">
<Border
Name="Border"
Background="#6EA0B0"
BorderBrush="#888888"
BorderThickness="1" >
<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>
<!--自定义菜单项之间的分隔符的样式-->
<Style x:Key=&#