Fruchtzwerg
Fruchtzwerg

Reputation: 11399

How to format a System.Windows.Media.Color in XAML using StringFormat

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

Answers (2)

Fruchtzwerg
Fruchtzwerg

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

Mitya
Mitya

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

Related Questions