2014-01-18 128 views
1

我正在嘗試創建一個WP8應用程序,我可以使用3個滑塊(如RGB一個)動態更改矩形的顏色。當然,我得在後面的代碼中的一些其他的東西,但這裏是奇怪的事情:WP8 + Color in XAML

 <Rectangle Width="100" Height="100"> 
      <Rectangle.Fill> 
       <SolidColorBrush> 
        <SolidColorBrush.Color> 
         <Color A="255" R="255"/> 
        </SolidColorBrush.Color> 
       </SolidColorBrush> 
      </Rectangle.Fill> 
     </Rectangle> 

當我嘗試在任何Windows Phone應用程序啓動這個代碼,在App推出,但有一個XamlParseException其告訴我,我無法將「255」轉換爲System.Byte。

最奇怪的是我的代碼在WPF應用程序中工作...:s有沒有人有問題?

非常感謝!

杜仲

回答

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); 
3

Silverlight不知道如何將字符串轉換爲字節。

Silverlight中的XAML解析器只知道如何處理double,int和bools。 [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