如何将自定义TextBox样式应用于内置控件?

时间:2012-11-16 00:53:26

标签: c# .net wpf xaml textbox

背景

在标准WPF应用程序中,右键单击TextBox会显示一个ContextMenu,其中包含三个命令:剪切,复制和粘贴。我的愿望是在我的应用程序中为所有TextBox ContextMenus添加一个Select All命令。

问题:

我的标准方法是创建一个以TextBox为目标并提供新ContextMenu的Style。这样,所有TextBox控件都会继承样式并获取更改。

麻烦的是我的样式不会被包含TextBoxes的控件继承。例如,在编辑DataGridTextColumn单元格时,我知道使用了TextBox但它没有继承我的样式。对于我的应用程序使用的某些第三方控件也是如此。

问题:

是否有其他方法可以控制,比如DataGridTextColumn的单元格,选择我的样式更改,还是我改变了模板?

附录:

这是风格:

<Style 
    TargetType="{x:Type TextBox}"
    BasedOn="{StaticResource {x:Type TextBox}}"
    >
    <Setter
        Property="ContextMenu"
        >
        <Setter.Value>
            <ContextMenu>
                <MenuItem
                    Header="Cu_t"
                    Command="ApplicationCommands.Cut"
                    InputGestureText="Ctrl+X"
                    />
                <MenuItem
                    Header="_Copy"
                    Command="ApplicationCommands.Copy"
                    InputGestureText="Ctrl+C"
                    />
                <MenuItem
                    Header="_Paste"
                    Command="ApplicationCommands.Paste"
                    InputGestureText="Ctrl+V"
                    />
                <Separator
                    />
                <MenuItem
                    Header="Select _All"
                    Command="ApplicationCommands.SelectAll"
                    InputGestureText="Ctrl+A"
                    />
            </ContextMenu>
        </Setter.Value>
    </Setter>
</Style>

1 个答案:

答案 0 :(得分:1)

您的文本框样式将反映到未应用任何样式的文本框中。因此,如果您有任何第三方文本框,并且已经使用密钥应用了样式。你的风格会失败。您可能需要使用表达式混合来打开控件模板并更改样式或了解文本框样式的应用方式。

欢呼声..