XAML中的WP8 + Color

时间:2014-01-18 15:00:49

标签: wpf xaml windows-phone

我正在尝试创建一个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有人有问题吗?

非常感谢!

杜仲

2 个答案:

答案 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);