5

おい。BackgroundColor という文字列プロパティを持つオブジェクトがあります。この文字列は、色の 16 進数表現です。このオブジェクトを変更できません。

これらのオブジェクトのコレクションを listView にバインドしています。私がやりたいことは、リストビューの行の背景を、行に表示されるオブジェクトの BackgroundColor プロパティにバインドすることです。

これへの最善の方法は何ですか?

4

2 に答える 2

6

Style を使用して、ListViewItem の Background を行のアイテムにバインドします。アイテムは ListViewItem のデフォルトの DataContext であるため、これは簡単です。

<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 が 16 進数として解析するための信号です。

于 2008-12-11T19:33:00.023 に答える
2

IValueConverterを使用するのが適切な解決策だと思います。文字列の 16 進値を Color に変換する HexConverter を作成できます。そのリンクから始めましょう。

于 2008-12-11T19:25:05.140 に答える