1

对于网格中的列,我有以下代码:

<dxg:GridColumn.CellTemplate>
<DataTemplate>
    <StackPanel>
        <Rectangle Width="40" Height="10" Stroke="{ Binding Value, StringFormat='{}#{0}'}" StrokeThickness="5" />
    </StackPanel>
</DataTemplate>                                    
</dxg:GridColumn.CellTemplate>

该列绑定到具有十六进制值的属性,例如:
- aaaaaa
- 123456

所以我想显示一个基于属性颜色的矩形。

据我了解,我需要将我的十六进制值修改为: 1)包括 # 符号 2)添加 alpha 通道。格式中的 '99' 只是为了测试这个东西是否适用于任何 alpha 值 - 它不适用。

我怎样才能让它工作?谢谢!

4

1 回答 1

3

在 aBinding中,该StringFormat属性仅适用于类型为 的属性String。正如MSDN所说:

如果将绑定值显示为字符串,则指定如何格式化绑定的字符串。

解决问题的最简单方法是编写一个IValueConverter. 该转换器将获取您的输入值并返回一个SolidColorBrush.

例如,如果您的十六进制值是字符串,则转换器的Convert方法:

public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
    var str = (string)value;
    var r = Byte.Parse(str.Substring(0, 2), NumberStyles.HexNumber);
    var g = Byte.Parse(str.Substring(2, 2), NumberStyles.HexNumber);
    var b = Byte.Parse(str.Substring(4, 2), NumberStyles.HexNumber);

    return new SolidColorBrush(Color.FromRgb(r, g, b));
}
于 2013-08-14T15:20:42.137 回答