Подтвердить что ты не робот

Список WPF. Пропустить символы подчеркивания в строках

У меня есть список WPF ListBox, который динамически заполняется элементами. Что-то вроде этого:

ListBox.Items.Add
(new ListBoxItem { Content = new CheckBox { IsChecked = true, Content = "string_string"} );

Проблема связана с содержимым флажка. Он показывает в графическом интерфейсе, как "stringstring"... Как избежать символов "_"? (Я получаю строки динамически)

4b9b3361

Ответ 1

Вы можете добавить текст в TextBlock и поместить этот TextBlock внутри своего Chekbox, TextBlock не поддерживает _ мнемонические символы. Вот что я имею в виду, в xaml, но вы можете легко преобразовать это в код:

<CheckBox IsChecked="True">
    <TextBlock>string_string</TextBlock>
</CheckBox>

Ответ 2

Шаблон по умолчанию для CheckBox содержит ContentPresenter, для которого RecognizesAccessKey установлено значение true. Если содержимое является строкой (что в вашем случае), то ContentPresenter создает элемент AccessText для отображения текста. Этот элемент скрывает подчеркивание, пока не будет нажата клавиша Alt, потому что он будет рассматривать его как мнемонику. Вы можете либо переделать CheckBox так, чтобы его ContentPresenter RecognizesAccessKey был ложным или лучше, но просто предоставил DataTemplate в качестве ContentTemplate, который содержит TextBlock. Если вы не уверены, будет ли содержимое строкой, вы можете установить ContentTemplateSelector, а в коде - DataTemplate, который содержит TextBlock, только если элемент является строкой. например.

<ListBox xmlns:sys="clr-namespace:System;assembly=mscorlib">
    <ListBox.Resources>
        <DataTemplate DataType="sys:String" x:Key="stringTemplate">
            <TextBlock Text="{Binding}" />
        </DataTemplate>
        <Style TargetType="CheckBox">
            <Setter Property="ContentTemplate" Value="{StaticResource stringTemplate}" />
        </Style>
    </ListBox.Resources>
    <ListBoxItem>
        <CheckBox Content="A_B" ContentTemplate="{StaticResource stringTemplate}"/>
        <!-- Or use the implicit style to set the ContentTemplate -->
        <CheckBox Content="A_B" />
    </ListBoxItem>
</ListBox>

Ответ 3

Используйте двойную строку подчеркивания string__string, так как в WPF _ является мнемоническим символом.

Еще лучше, просто решите эту проблему в xaml и создайте коллекцию в своей модели представления (или в коде).