Ярлык не отображает символ "_"
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;