我在WPF中的Label.Content
并未显示第一次出现的" _"字符。为什么?
<Window x:Class="WpfApplication3.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="148" Width="211">
<Grid>
<Label Content="L_abel" Height="28" HorizontalAlignment="Left" Margin="37,31,0,0" Name="label1" VerticalAlignment="Top" />
</Grid>
</Window>
设置Label.Content ="L__abel"
时:
项目中没有其他代码。
答案 0 :(得分:41)
_
来表示访问密钥,即您可以使用 Alt 按下以获得焦点或调用UI元素的密钥。这类似于Windows API和Windows窗体中&
的使用方式。由于标签旨在用作另一个控件的标签(例如,用于描述文本框),因此非常期待这一点。当您按 Alt 时,您会看到示例中的a
加下划线。
要设置访问密钥,请在应该是访问密钥的字符前添加下划线。如果您的内容有多个下划线字符,则只将第一个字符转换为访问密钥;其他下划线显示为普通文本。如果要转换为访问键的下划线不是第一个下划线,则对于要转换的下划线之前的任何下划线,请使用两个连续的下划线。例如,以下代码包含访问密钥并显示为_HelloWorld:
<Label>__Hello_World</Label>
由于H之前的下划线是双精度型,因此W键将作为访问键注册。
我想如果您既不需要也不想要Label
提供的功能,您可以使用TextBlock
。
答案 1 :(得分:9)
乔伊是对的!使用
<TextBlock>L_abel</TextBlock>
将显示所有下划线!
答案 2 :(得分:4)
因为_字母用于快捷方式(是加速器)
答案 3 :(得分:4)
在WPF中有一个名为 RecognizesAccessKey 的属性,尝试将其更改为false。如果您使用RadioButton,请注意后面还有标签,并且在RadioButton模板中禁用访问密钥识别,您必须在模板RecognizesAccessKey="False"
上设置ContentPresenter
。然后禁用它,或者用我现在不记得的其他东西替换标签。
答案 4 :(得分:3)
解决问题的最简单方法是:
更改
<Label Content="L_abel" Height="28" HorizontalAlignment="Left" Margin="37,31,0,0" Name="label1" VerticalAlignment="Top" />
到
<Label Height="28" HorizontalAlignment="Left" Margin="37,31,0,0" Name="label1" VerticalAlignment="Top">
<TextBlock Text="L_abel"/>
</Label>
答案 5 :(得分:0)
使用TextBlock解决此问题带有一些缺点,例如无法将内容垂直居中(将其放置在网格内,并且在许多情况下可能不需要附加的控件)。就我而言,我使用以下代码创建了一个行为像Label的TextBox:
var fauxLabel = new TextBox();
fauxLabel.Cursor = Cursors.Arrow; // Avoid the IBeam mouse cursor when hovering
fauxLabel.Background = Brushes.Transparent;
fauxLabel.BorderThickness = new Thickness(0.0, 0.0, 0.0, 0.0);
fauxLabel.Focusable = false;
答案 6 :(得分:0)
在几个地方,绑定到Label控件中的文本必须显示'_'字符。所以我写了一个转换器:
using System;
using System.Globalization;
using System.Windows;
using System.Windows.Data;
namespace Converters
{
public class TextToLabelConverter : DependencyObject, IValueConverter
{
/// <inheritdoc />
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return (value is string strValue)
? strValue.Replace("_", "__")
: Binding.DoNothing;
}
/// <inheritdoc />
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
}
因此在XAML中使用它:
...
xmlns:converters="clr-namespace:Converters"
...
<Window.Resources>
<converters:TextToLabelConverter x:Key="TextToLabelConverter" />
</Window.Resources>
<Grid>
<Label Content="{Binding SourceText, Converter={StaticResource TextToLabelConverter}}" />
</Grid>