WPF Contraignant de changer la couleur de remplissage de l'ellipse
Probablement une question simple mais:
Comment puis-je modifier par programmation la couleur d'une ellipse qui est défini dans le code XAML basés sur une variable?
Tout ce que j'ai lu sur la liaison est basée sur les collections et les listes -je ne peux pas le définir simplement (et littéralement) basée sur la valeur d'une variable de chaîne? string color = "red" color = "#FF0000"
OriginalL'auteur user294382 | 2010-03-16
Vous devez vous connecter pour publier un commentaire.
Il est intéressant de souligner que le convertisseur les autres postes de référence existe déjà, qui est pourquoi vous pouvez faire
<Ellipse Fill="red">
dans le code xaml de la première place. Le convertisseur estSystem.Windows.Media.BrushConverter
:Le plus efficace est d'utiliser la syntaxe complète:
MODIFIER en réponse à -1 et commentaires:
Le code ci-dessus fonctionne parfaitement bien dans le code, qui est ce que la question initiale était de savoir. Vous aussi ne pas souhaitez un
IValueConverter
- elles sont généralement utilisées pour liaison scénarios. UnTypeConverter
est la bonne solution ici (parce que vous êtes un moyen de convertir une chaîne de caractères à un pinceau). Voir cet article pour plus de détails.Modifier (avoir relu Aviad commentaire): vous n'avez pas besoin d'utiliser explicitement l'
TypeConverter
en Xaml - il est utilisé pour vous. Si j'écris ceci dans le code Xaml:... puis le moteur d'exécution utilise automatiquement un
BrushConverter
de transformer la chaîne de caractères littérale du pinceau. Que Xaml est essentiellement converti en équivalent à la main:De sorte que vous êtes de droite, vous ne pouvez pas l'utiliser dans le code Xaml - mais vous n'avez pas besoin d'.
Même si vous aviez une valeur de chaîne que vous avez voulu lier comme le remplir, vous n'avez pas besoin de spécifier le converter manuellement. Ce test à partir de Kaxaml:
Étrangement, vous ne pouvez pas utiliser la
StaticResource col
et ont toujours ce travail, mais avec la liaison et utilise automatiquement leValueConverter
de transformer la chaîne de caractères en une brosse.BrushConverter
ne pas mettre en œuvreIValueConverter
de sorte que vous ne pouvez pas l'utiliser dans le code XAML.Édité ma réponse plutôt que de répondre ici car je pense qu'il est bon de rappeler pourquoi je suis droit dans le détail...
OriginalL'auteur Dan Puzey
ce que vous devez faire est de mettre en œuvre un convertisseur personnalisé pour convertir la couleur de la brosse de l'objet. Quelque chose comme ceci...
Puis spécifiez que le convertisseur de en votre de liaison
Brush
objet au lieu d'uneColor
objet. Simplement à l'aide d'unBrushConverter
au lieu d'unColorConverter
devrait faire l'affaire. Bien que je pense que vous avez besoin d'une instance de ce convertisseur, leConvertFromString
méthode n'est pas statique, est-il?Si vous lier à l'aide d'une couleur, alors vous êtes libre d'utiliser les Couleurs de la classe qui a intellisense sur les noms de couleur.
Ces convertisseurs il existe déjà....
OriginalL'auteur Leigh S
utilisation
si le Nom de votre ellipse dans votre xaml est "my_ellipse",
dans votre code à quelque chose comme ceci:
ou ceci:
OriginalL'auteur Alex Stoliar