Как выделить элемент в выпадающем списке, используя WPF? - PullRequest
1 голос
/ 29 апреля 2011

У меня есть поле со списком объектов.Мне нравится выделять элемент в выпадающем списке на основе свойства IsHighlighted объекта.

Я пытался написать собственный стиль, но безуспешно ...

<Style x:Key="SimpleComboBoxItem" TargetType="ComboBoxItem">
        <Setter Property="FocusVisualStyle" Value="{x:Null}" />
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="ComboBoxItem">
                    <Border Name="Border" Padding="2" SnapsToDevicePixels="true">
                        <ContentPresenter x:Name="contentPresenter" />
                    </Border>
                    <ControlTemplate.Triggers>
                        <Trigger Property="IsSelected" Value="true">
                            <Setter TargetName="Border" Property="Background" Value="#FFCCCCCC"/>
                        </Trigger>
                        <Trigger Property="Tag" Value="Highlight" SourceName="contentPresenter">
                            <Setter Property="Background" TargetName="Border" Value="#FFAAF3A0"/>
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

Спасибозаранее

Ответы [ 2 ]

3 голосов
/ 04 октября 2011

Это должно нормально работать с простым DataTrigger.

Класс вашего объекта:

public class TestObject
{
    public string Name { get; set; }

    public bool IsHighlighted { get; set; }

    public override string ToString()
    {
        return this.Name;
    }
}

Xaml:

<Window x:Class="TestWPF.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:TestWPF"
        Title="MainWindow">
    <Grid>
        <StackPanel>
            <ComboBox>
            <ComboBox.Resources>
                <Style TargetType="ComboBoxItem">
                    <Setter Property="FocusVisualStyle" Value="{x:Null}" />
                    <Setter Property="Background" Value="Gray" />
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding IsHighlighted}" Value="True">
                            <Setter Property="Background" Value="Red" />
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </ComboBox.Resources>
                <local:Employee Name="Nick" />
                <local:Employee Name="Bob" IsHighlighted="True" />
                <local:Employee Name="Fred" />
            </ComboBox>
        </StackPanel>
    </Grid>
</Window>

Примечание. В отличие от приведенного выше примера, я предполагаю, что в вашем коде вы связываете ItemsSource комбинированного списка ... который должен работать точно так же. Однако следует соблюдать осторожность: если свойство IsHighlighted вашего объекта может измениться, вы должны реализовать изменение INotifyProperty, чтобы при изменении значения пользовательский интерфейс уведомлял об обновлении триггеров.

0 голосов
/ 29 апреля 2011

Возможно, вы захотите переопределить HighlightBrushKey, переопределяя стиль выделения по умолчанию:

<ComboBox.Resources>

    <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="FFAAF3A0" />

</ComboBox.Resources>

Должен сделать трюк за вас.

(если оно более общее, поместите его прямо в UserControl.Resources / Window.Resources)

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