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



我需要以格式为十六进制#rrggbbTextBlock呈现System.Windows.Media.Color。绑定颜色,例如

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

结果的格式类似于#aarrggbb.我知道我可以创建自己的转换器来获得所需的格式,但我不喜欢这种努力。我想知道是否没有其他更简单的方法。

我知道,定义DateTime的格式可以很容易地完成,就像

StringFormat={}{0:HH:mm}

与我尝试的这个解决方案类似

StringFormat={}{0:#rrggbb}

但结果是

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

有没有办法使用StringFormat来格式化颜色?如果是,相应的语法是什么?

最后,经过大量搜索,我认为不可能格式化像DateTime这样简单的Color。我的解决方案需要多几行,但基本上是相同的。使用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>

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

最新更新