我正在尝试创建一个WP8应用程序,在其中我可以使用3个滑块(如RGB一个)动态更改矩形颜色。当然,我在代码中还有其他一些东西,但这里有一些奇怪的东西:
<Rectangle Width="100" Height="100">
<Rectangle.Fill>
<SolidColorBrush>
<SolidColorBrush.Color>
<Color A="255" R="255"/>
</SolidColorBrush.Color>
</SolidColorBrush>
</Rectangle.Fill>
</Rectangle>
当我尝试在任何Windows Phone应用程序中启动此代码时,应用程序正在启动但是有一个XamlParseException告诉我我无法转换&#34; 255&#34;到System.Byte。
最奇怪的是我的代码在WPF应用程序中运行......:s有人有问题吗?
非常感谢!
杜仲
答案 0 :(得分:3)
Silverlight不知道如何将字符串转换为字节。
Silverlight中的XAML解析器只知道如何处理双精度,整数和布尔值。 [Reference]
您可以使用十六进制代替ARGB:
<Rectangle Width="100" Height="100">
<Rectangle.Fill>
<SolidColorBrush Color="#FFFF0000" />
</Rectangle.Fill>
</Rectangle>
A=255, R=255, G=0, B=0
相当于十六进制A=FF, R=FF, G=00, B=00
。
答案 1 :(得分:1)
您可以将Rectangle.Fill作为一个整体绑定到SolidColorBrush,而不是单独的颜色通道。
<Rectangle Width="100" Height="100" Fill="{Binding FillBrush}" />
private SolidColorBrush fillBrush = new SolidColorBrush(Colors.Transparent);
public SolidColorBrush FillBrush
{
get
{
return fillBrush;
}
set
{
fillBrush = value;
OnPropertyChanged();
}
}
每次滑块值更改时,都会根据这些值创建一个新的SolidColorBrush。
Color fillColor = Color.FromArgb((byte)255, (byte)255, (byte)255, (byte)255);
FillBrush = new SolidColorBrush(fillColor);