Итак, я добавляю всплывающие подсказки в форму WPF, и в основном подсказки должны соответствовать содержимому. Однако у меня есть _
в некоторых элементах управления, чтобы их можно было выбрать с помощью ALT+ <key>. Я, конечно, не хочу, чтобы _ был включен в текст всплывающей подсказки.
Кроме того, я бы предпочел не писать имя элемента управления в третий раз для ElementName=
. Это то, что я сейчас имею:
<CheckBox x:Uid="chkProcess" Name="chkProcess" ToolTip="{Binding ElementName=chkProcess, Path=Content}">_Process widgets</CheckBox>
У меня также есть второй метод, который работает, но не так хорош. Он в основном присоединяется к событию TollTipOpening и динамически изменяет значение всплывающей подсказки для соответствия содержимому с правильной дескрипцией _
символов.
Есть ли чистый способ избавиться от _ с привязкой данных или к лучшему способу сделать это в целом?
Вы можете попробовать: Используйте ярлык в подсказке, которая не будет показывать "_",
<CheckBox x:Uid="chkProcess" Name="chkProcess">_Process widgets
<CheckBox.ToolTip>
<ToolTip DataContext="{Binding Path=PlacementTarget, RelativeSource={x:Static RelativeSource.Self}}">
<Label Content="{Binding Content}"/>
</ToolTip>
</CheckBox.ToolTip>
</CheckBox>
Вы можете заменить ElementName=chkProcess
на RelativeSource={RelativeSource Self}
. Хотя он более подробный, он может также позволить вам удалить атрибут Name
.
Если вы хотите, чтобы вычистить _
символов, вы можете создать простой IValueConverter
для выполнения этой задачи, а также указать Converter
на ваш кончик инструмента Binding
. Однако, имея подсказку, которая просто срывает ярлык, который уже отображается, в лучшем случае кажется бессмысленным и в худшем случае раздражает.
TextBlock
имел свойство только для чтения, указывающее, был ли обрезан текст на дисплее, и в этом случае вы можете включить обрезку текста и условно включить всплывающую подсказку только для этих случаев.