WPF: привязка цвета фона элемента listview к шестнадцатеричному свойству String объекта - PullRequest
5 голосов
/ 11 декабря 2008

Эй. У меня есть объект, который имеет свойство строки с именем BackgroundColor. Эта строка является шестнадцатеричным представлением цвета. Я не могу изменить этот объект.

Я связываю коллекцию этих объектов со списком. То, что я хотел бы сделать, это связать фон строки списка со свойством BackgroundColor объекта, который отображается в строке.

Какой лучший способ это сделать?

Ответы [ 2 ]

6 голосов
/ 11 декабря 2008

Вы захотите использовать Стиль, чтобы связать Фон ListViewItem с элементом для строки. Элемент является DataContext по умолчанию для ListViewItem, поэтому это должно быть просто:

<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="colors" Type="{x:Type sys:String}">
            <sys:String>Red</sys:String>
            <sys:String>Yellow</sys:String>
            <sys:String>#0000FF</sys:String>
        </x:Array>
    </Grid.Resources>
    <ListView ItemsSource="{StaticResource colors}">
        <ListView.Resources>
            <Style TargetType="{x:Type ListViewItem}">
                <Setter Property="Background" Value="{Binding .}"/>
            </Style>
        </ListView.Resources>
    </ListView>
</Grid>

Вместо привязки ко всему элементу вы будете привязывать к BackgroundColor, но он должен быть похож на выше. Вам нужно использовать конвертер с привязкой для префикса "#", это сигнал встроенному BrushConverter для его анализа в шестнадцатеричном виде.

2 голосов
/ 11 декабря 2008

Я думаю, что использование IValueConverter является подходящим решением. Вы можете создать HexConverter, который преобразует шестнадцатеричное значение строки в Color. Эта ссылка должна помочь вам начать.

...