2017-08-19 1 views
0

Je dois présenter System.Windows.Media.Color dans un TextBlock au format hexadécimal #rrggbb. Reliure une couleur commeComment formater un System.Windows.Media.Color en XAML en utilisant StringFormat

<TextBlock Text="{Binding Color}"/> 

résultats dans une chaîne formatée comme #aarrggbb. Je sais que je pourrais créer mon propre convertisseur pour obtenir le format désiré, mais je n'aime pas l'effort. Je me demandais s'il n'y avait pas d'autre moyen, beaucoup plus simple.

Je sais, définir les formats d'un DateTime pourrait être facilement fait comme

StringFormat={}{0:HH:mm} 

similaires à cette solution que j'ai essayé

StringFormat={}{0:#rrggbb} 

mais le résultat est

sC# 1rrggbb , rrggbb, 1rrggbb, 1rrggbb

Existe-t-il un moyen d'utiliser StringFormat pour formater la couleur? Si oui, quelle est la syntaxe corret?

+0

Vous avez besoin du code hexadécimal droit? –

+0

Oui @sifavahora, j'ai oublié de le mentionner à la question. – Fruchtzwerg

+0

essayez ceci: https://stackoverflow.com/a/2395477/5742206 –

Répondre

0

Enfin, après avoir cherché beaucoup, je pense qu'il est impossible de formater un Color aussi simple que DateTime. Ma solution nécessite quelques lignes de plus mais en gros c'est la même chose. En utilisant MultiBinding il est possible de mettre les valeurs de couleur formatées ensemble comme:

<TextBlock> 
    <TextBlock.Text> 
     <MultiBinding StringFormat="#{0:X2}{1:X2}{2:X2}"> 
      <Binding Path="Color.R"/> 
      <Binding Path="Color.G"/> 
      <Binding Path="Color.B"/> 
     </MultiBinding> 
    </TextBlock.Text> 
</TextBlock> 
0

Solution de xaml pur. Notez que les balises Run doivent être sur une ligne ou que vous obtenez des espaces entre les valeurs RGB.

<TextBlock DataContext="{Binding Color}" Text="#"> 
    <Run Text="{Binding R, StringFormat={}{0:X}}"/><Run Text="{Binding G, StringFormat={}{0:X}}"/><Run Text="{Binding B, StringFormat={}{0:X}}"/> 
</TextBlock>