WPF: Liaison d'une couleur d'arrière-plan ListViewItem à une propriété String hexadécimal d'un objet
-
21-08-2019 - |
Question
Hey. J'ai un objet qui a une propriété de chaîne appelée BackgroundColor. Cette chaîne est la représentation hexadécimale d'une couleur. Je ne peux pas changer cet objet.
Je liant une collection de ces objets à un listView. Ce que je voudrais faire est de lier l'arrière-plan de la ligne du listview à la propriété BackgroundColor de l'objet qui est affiché dans la ligne.
Quelle est la meilleure façon de ce?
La solution
Je pense que l'aide d'un IValueConverter est la solution appropriée. Vous pouvez faire un HexConverter qui convertit la valeur hexadécimale de chaîne à couleur. Ce lien devrait vous aider à démarrer.
Autres conseils
Vous aurez envie d'utiliser un style pour lier l'arrière-plan de ListViewItem à l'élément de la ligne. L'article est DataContext par défaut du ListViewItem ce qui devrait être simple:
<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>
Au lieu de se lier à l'élément tout vous lier à la BackgroundColor, mais il devrait être similaire à ce qui précède. Vous devez avoir à utiliser un convertisseur avec la liaison à préfixe un « # », c'est le signal au BrushConverter intégré pour analyser comme hex.