我需要以格式为十六进制#rrggbb
的TextBlock
呈现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>