如何使用StringFormat格式化XAML中的System.Windows.Media.Color

时间:2017-08-19 08:39:27

标签: c# wpf xaml converter string-formatting

我需要在格式为十六进制System.Windows.Media.Color的{​​{1}}中显示TextBlock。绑定像

这样的颜色
#rrggbb

会生成格式为<TextBlock Text="{Binding Color}"/> 的字符串。我知道我可以创建自己的转换器来获得所需的格式,但我不喜欢这种努力。我想知道是否没有其他更简单的方法。

我知道,定义#aarrggbb的格式可以像

一样轻松完成
DateTime

与此解决方案类似,我尝试了

StringFormat={}{0:HH:mm}

但结果是

  

sc#1rrggbb,rrggbb,1rrggbb,1rrggbb

有没有办法使用StringFormat={}{0:#rrggbb} 格式化颜色?如果是,最新的语法是什么?

2 个答案:

答案 0 :(得分:0)

Pure xaml解决方案。请注意,Run标记应该在一行中,或者在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>

答案 1 :(得分:0)

最后,经过大量搜索后,我认为无法将Color格式化为DateTime这么简单。我的解决方案需要更多行,但基本上它是相同的。使用MultiBinding可以将格式化的颜色值放在一起,如:

<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>