如何为默认的wpf contextmenu创建样式?

时间:2013-07-04 07:42:18

标签: wpf textbox contextmenu controltemplates

我有一个要求在哪里为contextmenu创建一个可以自动应用的样式,我已经尝试了我在网上找到的每个例子,但没有任何工作。我试过在MSDN链接中叙述的风格在这里:http://msdn.microsoft.com/en-us/library/ms744758(v=vs.85).aspx

我使用了以下样式,但它无效。

<Style x:Key="CStyle" TargetType="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="ContextMenu">
                    <Border Name="Border"
                            Background="Red"
                            BorderBrush="{StaticResource SolidBorderBrush}"
                            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>

任何人都可以指导我实现这个目标吗?

我尝试将此样式应用于TextBoxStyle(请参阅下面的示例),当我运行它并右键单击文本框的内容时,我看到以下错误:

“'System.Windows.Style'不是属性'ContextMenu'的有效值。” 我在以下风格的任何地方都做错了吗?请指导我。

示例文本框样式:

<Style x:Key="TextBoxStyle" TargetType="{x:Type TextBox}" BasedOn="{StaticResource BaseTextStyle}">
    <Setter Property="SnapsToDevicePixels" Value="True"/>
    <Setter Property="ContextMenu" Value="{StaticResource CStyle}" />
    <Setter Property="Validation.ErrorTemplate" Value="{x:Null}"/>
    <Setter Property="Template">
        <Setter.Value>

1 个答案:

答案 0 :(得分:1)

编辑:基于修订后的问题

您正尝试将ContextMenu的值设置为Style。将您的样式更改为以下内容:

    <Style x:Key="TextBoxStyle" TargetType="{x:Type TextBox}" BasedOn="{StaticResource BaseTextStyle}">
        <Setter Property="SnapsToDevicePixels" Value="True"/>
        <Setter Property="ContextMenu">
            <Setter.Value>
                <ContextMenu Style="{StaticResource CStyle}">
                    <MenuItem Header="Cut" Command="Cut"/>
                    <MenuItem Header="Copy" Command="Copy"/>
                    <MenuItem Header="Paste" Command="Paste"/>
                </ContextMenu>
            </Setter.Value>
        </Setter>
        <Setter Property="Validation.ErrorTemplate" Value="{x:Null}"/>
    </Style>