Ярлык не отображает символ "_"

My Label.Content в WPF не отображает первое появление символа "_". Зачем?

<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>

enter image description here

При установке Label.Content ="L__abel":

enter image description here

В проекте нет дополнительного кода.

Ответы

Ответ 1

_ используется в WPF для сигнализации ключа доступа, то есть клавиши, которую вы можете нажать с помощью Alt, чтобы дать фокус или вызвать элемент пользовательского интерфейса. Это похоже на то, как & используется в Windows API и Windows Forms. Поскольку метки предназначены для использования в качестве метки для другого элемента управления (например, для описания текстового поля), это в значительной степени ожидается. Вы должны увидеть a в вашем примере, подчеркнутом при нажатии Alt.

В документации :

Чтобы установить ключ доступа, добавьте знак подчеркивания перед символом, который должен быть ключом доступа. Если ваш контент имеет несколько символов подчеркивания, только первый преобразуется в ключ доступа; другие подчеркивания отображаются как обычный текст. Если подчеркивание, которое вы хотите преобразовать в ключ доступа, не является первым подчеркиванием, используйте два последовательных символа подчеркивания для любых символов подчеркивания, которые предшествуют тому, который вы хотите преобразовать. Например, следующий код содержит ключ доступа и отображается как _HelloWorld:

<Label>__Hello_World</Label> 

Поскольку подчеркивание, которое предшествует H, является двойным, ключ W регистрируется как ключ доступа.

Я предполагаю, что если вам не нужны и не нужны функции Label, вы можете использовать TextBlock.

Ответ 2

Джо прав! Используйте

<TextBlock>L_abel</TextBlock>

и все ваши символы подчеркивания будут отображаться!

Ответ 3

Поскольку символ _ используется для ярлыков (является ускорителем)

Ответ 4

В WPF есть атрибут RecognizesAccessKey, попробуйте изменить его на false. Если вы используете RadioButton, имейте в виду, что там также есть ярлык, а в шаблоне RadioButton для отключения распознавания ключа доступа вы должны установить RecognizesAccessKey="False" в шаблон ContentPresenter. Затем это отключено, или метка заменяется на что-то еще, что я не помню сейчас.

Ответ 5

Самый простой способ исправить это:

Измените

<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>

Ответ 6

Использование TextBlock для решения этой проблемы имеет ряд недостатков, таких как невозможность центрировать содержимое по вертикали (за исключением размещения в сетке, и во многих ситуациях требуемые дополнительные элементы управления могут быть нежелательны). В моем случае я создал TextBox, который ведет себя как Label, используя следующий код:

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;