Reputation: 11399
I need to present System.Windows.Media.Color
in a TextBlock
formatted as hexadecimal #rrggbb
. Binding a color like
<TextBlock Text="{Binding Color}"/>
results in a string formatted like #aarrggbb
. I know I could create my own converter to get the desired format, but I don't like the effort. I wondered if there is no other, much simpler way.
I know, defining formats of a DateTime
could be easily done like
StringFormat={}{0:HH:mm}
Similar to this solution I tried
StringFormat={}{0:#rrggbb}
but the result is
sc#1rrggbb, rrggbb, 1rrggbb, 1rrggbb
Is there a way to use StringFormat
to format the color? If yes, whats the corret syntax?
Upvotes: 0
Views: 926
Reputation: 11399
Finally, after searching a lot, I think it's not possible to format a Color
as simple as a DateTime
. My solution requires a few lines more but basically it's the same. Using MultiBinding
it's possible to put the formatted color values together like:
<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>
Upvotes: 2
Reputation: 642
Pure xaml solution. Note that Run
tags should be in one line or you get whitespaces between rgb values.
<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>
Upvotes: 1