如何使用 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>