如何使用 StringFormat 在 XAML 中格式化 System.Windows.Media.Color
How to format a System.Windows.Media.Color in XAML using StringFormat
我需要以 TextBlock
格式显示 System.Windows.Media.Color
,格式为十六进制 #rrggbb
。绑定颜色如
<TextBlock Text="{Binding Color}"/>
生成格式类似于 #aarrggbb
的字符串。我知道我可以创建自己的转换器来获得所需的格式,但我不喜欢这种努力。我想知道有没有其他更简单的方法。
我知道,定义 DateTime
的格式可以像
一样轻松完成
StringFormat={}{0:HH:mm}
我试过类似的解决方案
StringFormat={}{0:#rrggbb}
但结果是
sc#1rrggbb, rrggbb, 1rrggbb, 1rrggbb
有没有办法用StringFormat
来格式化颜色?如果是,正确的语法是什么?
纯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>
最后,经过大量搜索,我认为不可能像 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>
我需要以 TextBlock
格式显示 System.Windows.Media.Color
,格式为十六进制 #rrggbb
。绑定颜色如
<TextBlock Text="{Binding Color}"/>
生成格式类似于 #aarrggbb
的字符串。我知道我可以创建自己的转换器来获得所需的格式,但我不喜欢这种努力。我想知道有没有其他更简单的方法。
我知道,定义 DateTime
的格式可以像
StringFormat={}{0:HH:mm}
我试过类似的解决方案
StringFormat={}{0:#rrggbb}
但结果是
sc#1rrggbb, rrggbb, 1rrggbb, 1rrggbb
有没有办法用StringFormat
来格式化颜色?如果是,正确的语法是什么?
纯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>
最后,经过大量搜索,我认为不可能像 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>