Ресурс стиля Wpf для цвета переднего плана выбранного элемента списка - PullRequest
3 голосов
/ 12 февраля 2009

Справочная информация: Я создаю пользовательский список, в котором есть радио-кнопки для каждого элемента списка, поэтому по сути это будет RadioButtonList. Элемент управления полностью создан в коде. На данный момент элемент управления отображается и ведет себя правильно и поддерживает 2 ориентации (горизонтальная / вертикальная). В списке используется ItemTemplate, представляющий собой StackPanel с RadioButton и TextBlock.

До сих пор я был в состоянии предотвратить изменение цвета фона элемента при выборе элемента с помощью стиля, который устанавливает его прозрачный фон.

Я хотел бы сделать то же самое для цвета переднего плана.

По сути, режим выбора в ListBox является одиночным, и когда элемент выбран, я хочу, чтобы он отображался только с помощью RadioButton.

Я использую следующий код для установки ItemContainerStyle:

System.Windows.Style style =  
    new System.Windows.Style(typeof(System.Windows.Controls.ListBoxItem));  

System.Windows.Media.SolidColorBrush brush =  
    new System.Windows.Media.SolidColorBrush(System.Windows.Media.Colors.Transparent);  

style.Resources.Add(System.Windows.SystemColors.HighlightBrushKey, brush);

TextBlock моего шаблона создается с использованием System.Windows.FactoryFrameworkElement, например:

System.Windows.FrameworkElementFactory factoryTextBlock =   
    new System.Windows.FrameworkElementFactory(typeof(System.Windows.Controls.TextBlock));
factoryTextBlock.SetBinding(System.Windows.Controls.TextBlock.TextProperty, new System.Windows.Data.Binding("Description"));  
factoryStackPanel.AppendChild(factoryTextBlock);

Затем FactoryTextBox добавляется к FactoryStackPanel и устанавливается как шаблон элемента ListBox.

В данный момент у меня установлен цвет фона на Прозрачный, когда выбран элемент. Поскольку текст по умолчанию настроен на белый цвет, он визуально исчезает при выборе элемента. Я ищу способ установить цвет на переднем плане текстового блока, когда он выбран. На данный момент это может быть черный, но в конечном итоге он будет ссылаться на цвет шрифта на более высоком уровне.

1 Ответ

6 голосов
/ 13 февраля 2009

Вот пример использования XAML, я оставлю вам перевод на C #:

<Grid xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      xmlns:sys="clr-namespace:System;assembly=mscorlib"
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <Grid.Resources>
        <x:Array x:Key="data" Type="{x:Type sys:String}">
            <sys:String>sphinx</sys:String>
            <sys:String>of</sys:String>
            <sys:String>black</sys:String>
            <sys:String>quartz</sys:String>
        </x:Array>
    </Grid.Resources>
    <ListBox ItemsSource="{StaticResource data}">
        <ListBox.Resources>
            <Style TargetType="{x:Type ListBoxItem}">
                <Style.Triggers>
                    <Trigger Property="IsSelected" Value="True">
                        <Setter Property="Foreground" Value="Pink"/>
                    </Trigger>
                </Style.Triggers>
            </Style>
        </ListBox.Resources>
    </ListBox>
</Grid>
...