我在网格中有一列代码:
<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值 - 它不会。
我怎么能让这个工作?谢谢!
答案 0 :(得分:3)
在Binding
中,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));
}