WPF中下划线未显示

20

在我的整个应用程序中,有一些下划线(_)没有显示出来。

这是由于访问器造成的。但我该如何禁用它?全局应用?我在标签、文本框等控件上都没有使用它们。

谢谢


可能是[禁用WPF标签加速键(文本下划线丢失)]的重复问题(https://dev59.com/5nVD5IYBdhLWcg3wQJKT)。 - Carl
4个回答

22

要在全局范围内禁用所有标签的下划线,您可以像这样覆盖标签的默认模板:

<Style x:Key="{x:Type Label}"
       TargetType="{x:Type Label}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type Label}">
                <Border Background="{TemplateBinding Background}"
                        BorderThickness="{TemplateBinding BorderThickness}"
                        BorderBrush="{TemplateBinding BorderBrush}"
                        Padding="{TemplateBinding Padding}"
                        SnapsToDevicePixels="true">
                    <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                                      VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
                                      RecognizesAccessKey="False"
                                      SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
                </Border>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsEnabled"
                             Value="false">
                        <Setter Property="Foreground"
                                Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}" />
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

这与默认模板不同的是这一行:RecognizesAccessKey="False"

将这个样式放在应用程序的全局资源(App.xaml)中,您的标签就不会再识别下划线了。


嗨!谢谢你的回复!我今天会尝试一下,看起来是我需要的。绑定默认值是必须的吗? - J4N
@J4N - 是的,只要您想保留控件的所有功能,这是必需的。例如,如果您删除了Padding="{TemplateBinding Padding}",那么在应用程序中设置标签的Padding将无法正常工作。 - Pavlo Glazkov
好的,我可以在哪里找到默认模板吗?因为我需要为几个组件进行自定义。 - J4N
@J4N - 默认模板已包含在Expression Blend安装中。您可以在以下文件夹中找到它们:"<Expression Blend安装路径>\SystemThemes\Wpf"。 - Pavlo Glazkov
我正在使用Visual Studio进行设计,有没有可能在Visual Studio中使用资源? - J4N
显示剩余4条评论

10

使用两个下划线:

name = "__something";

我不能使用这个,这些值来自数据库,而且我无法承担在每个字段上都这样做的成本。而且我的大多数字段都直接绑定在我的对象值上。 - J4N
4
使用值转换器将下划线替换为双下划线。很容易。 - Aliostad

9
一种简单的解决方法是不使用

7
如果你不想处理可编辑的内容,可以使用TextBlock。绑定到Text而不是Content - Kate Gregory
如果使用TextBox而不是Label,我还会将IsReadOnly设置为True并将IsTabStop设置为False。 - sergeantKK

4
你尝试过将下划线加倍吗?

为什么会出现双下划线而不是单下划线? - Ahmad
2
@Ahmad因为下划线表示下一个字母是访问键(与Alt一起使用;例如,文本“_Ahmad”将允许通过下划线指示的Alt + A访问它)。所以两个下划线是转义序列。 - Hexo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接