Изменение цвета HighlighBrushKey в XAML - PullRequest
1 голос
/ 19 апреля 2010

У меня следующая проблема.

Цвет фона в ListView установлен LightGreen или White, независимо от того, является ли boolflag верным или ложным.

Пример экрана

Window1.xaml:

<Window.Resources>

    <Style TargetType="{x:Type ListViewItem}">
        <Style.Triggers>
            <DataTrigger Binding="{Binding Path=BoolFlag}" Value="True">
                <Setter Property="Background" Value="LightGreen" />
            </DataTrigger>
        </Style.Triggers>
    </Style>

</Window.Resources>

<StackPanel>
    <ListView ItemsSource="{Binding Path=Personen}" SelectionMode="Single" SelectionChanged="ListViewSelectionChanged">
        <ListView.View>
            <GridView>
                <GridViewColumn DisplayMemberBinding="{Binding Path=Vorname}" Header="Vorname" />
                <GridViewColumn DisplayMemberBinding="{Binding Path=Nachname}" Header="Nachname" />
                <GridViewColumn DisplayMemberBinding="{Binding Path=Alter}" Header="Alter" />
                <GridViewColumn DisplayMemberBinding="{Binding Path=BoolFlag}" Header="BoolFlag" />
            </GridView>
        </ListView.View>
    </ListView>
</StackPanel>

Window1.xaml.cs:

public partial class Window1 : Window
{
    private IList<Person> _personen = new List<Person>();

    public Window1()
    {
        _personen.Add(new Person 
                {
                    Vorname = "Max",
                    Nachname = "Mustermann",
                    Alter = 18,
                    BoolFlag = false,
                });

        _personen.Add(new Person 
                {
                    Vorname = "Karl",
                    Nachname = "Mayer",
                    Alter = 27,
                    BoolFlag = true,
                });

        _personen.Add(new Person 
                {
                    Vorname = "Josef",
                    Nachname = "Huber",
                    Alter = 38,
                    BoolFlag = false,
                });

        DataContext = this;

        InitializeComponent();
    }

    public IList<Person> Personen
    {
        get
        {
            return _personen;
        }
    }

    private void ListViewSelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        Person person = e.AddedItems[0] as Person;

        if (person != null)
        {
            if (person.BoolFlag)
            {
                this.Resources[SystemColors.HighlightBrushKey] = Brushes.Green;
            }
            else
            {
                this.Resources[SystemColors.HighlightBrushKey] = Brushes.RoyalBlue;
            }
        }
    }
}

Person.cs:

public class Person
{
    public string Vorname { get; set; }

    public string Nachname { get; set; }

    public int Alter { get; set; }

    public bool BoolFlag { get; set; }
}

Теперь я хочу установить цвет подсветки выбранного элемента в зависимости от фоллага. В Code-Behind я делаю это с:

private void ListViewSelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        Person person = e.AddedItems[0] as Person;

        if (person != null)
        {
            if (person.BoolFlag)
            {
                this.Resources[SystemColors.HighlightBrushKey] = Brushes.Green;
            }
            else
            {
                this.Resources[SystemColors.HighlightBrushKey] = Brushes.RoyalBlue;
            }
        }
    }
}

Это отлично работает, но теперь я хочу определить код выше в XAML-файле.

С

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

Я могу перезаписать значение по умолчанию. Тем не менее, это работает, но цвет установлен на Зеленый для всех выбранных элементов. Я пробовал по-разному переключать цвет HighlightBrushKey между зеленым и синим в XAML, в зависимости от болвана, но мне это не удалось.

Можете ли вы помочь мне и привести несколько примеров?

1 Ответ

1 голос
/ 19 апреля 2010

Не знаю, почему highlightBrushKey не такой гибкий.По той же причине я включил альтернативный способ установки цвета фона выбранных элементов, используя его границу.Вы можете взглянуть на это http://vbcity.com/blogs/xtab/archive/2009/06/28/background-color-for-wpf-listbox-selected-item.aspx

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