Список WPF. Пропустить символы подчеркивания в строках - PullRequest
24 голосов
/ 05 января 2011

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

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

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

Ответы [ 3 ]

28 голосов
/ 05 января 2011

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

<CheckBox IsChecked="True">
    <TextBlock>string_string</TextBlock>
</CheckBox>
14 голосов
/ 05 января 2011

Шаблон по умолчанию для CheckBox содержит ContentPresenter, для которого RecognizesAccessKey имеет значение true. Если содержимое является строкой (что в вашем случае), то ContentPresenter создает элемент AccessText для отображения текста. Этот элемент скрывает подчеркивание до тех пор, пока не будет нажата клавиша Alt, поскольку он будет обрабатывать его как мнемонику. Вы можете либо повторить шаблон CheckBox, чтобы RecognizesAccessKey его ContentPresenter был ложным или, что еще лучше, но просто предоставить 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>
7 голосов
/ 05 января 2011

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...