2009-08-03 10 views
1

Ich versuche die Farbe eines RadialGradientBrush in Silverlight 3 an eine Eigenschaft zu binden, aber ich kann es einfach nicht funktionieren lassen.Die Farbe eines RadialGradient Pinsels in Silverlight speichern 3

Zum Beispiel in einem Probe Test-App alles, was ich habe, ist

<navigation:Page x:Class="SilverlightNavigator.HomePage" 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
x:Name="HomePageUC" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:navigation="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Navigation" 
     Title="HomePage Page"> 
<Grid x:Name="LayoutRoot" Background="White"> 
     <StackPanel> 

      <TextBlock 
         DataContext="{Binding ElementName=HomePageUC}" 
         Text="{Binding TestColorOne}" /> 

     <Rectangle x:Name="testRectangle" Height="100" Width="100" 
        DataContext="{Binding ElementName=HomePageUC}" > 
       <Rectangle.Fill> 
       <RadialGradientBrush> 
        <GradientStop Color="{Binding TestColorOne}" Offset="0" /> 
        <GradientStop Color="{Binding TestColorTwo}" Offset="1"/> 
        <!-- 
        <GradientStop Color="#FFFF0000" /> 
        <GradientStop Color="#FF00FF00" Offset="1"/> 
        --> 
       </RadialGradientBrush> 
       </Rectangle.Fill> 
      </Rectangle> 

     </StackPanel> 

In der Code-behind, ich habe sie sogar Abhängigkeitseigenschaften wie dies gemacht ..

public static readonly DependencyProperty TestColorOneProperty = 
     DependencyProperty.RegisterAttached("TestColorOne", typeof(Color), typeof(HomePage), null); 

    public static readonly DependencyProperty TestColorTwoProperty = 
     DependencyProperty.RegisterAttached("TestColorTwo", typeof(Color), typeof(HomePage), null); 


    public Color TestColorOne 
    { 
     get { return (Color)GetValue(TestColorOneProperty); } 
     set { SetValue(TestColorOneProperty, value); } 
    } 

    public Color TestColorTwo 
    { 
     get { return (Color)GetValue(TestColorTwoProperty); } 
     set { SetValue(TestColorTwoProperty, value); } 
    } 

Aber das gibt noch mir die sehr nicht hilfreiche Ausnahme AG_E_PARSER_BAD_PROPERTY_VALUE. Wenn ich die zwei Xaml-Zeilen, deren Farben fest codiert sind, auskommentiere, funktioniert das gut. Ich weiß, dass die Eigenschaften in Ordnung sind, weil, wenn ich die Farben fest codiere oder das Rechteck auskommentiere, zeigt es den feinen Text an. (Über die Bindung an den TextBlock)

Ich habe auch versucht, die Zeichenfolge "Rot", "Blau" usw. anstelle des Farbobjekts übergeben. Aber die Bindung scheint einfach nicht zu funktionieren.

Irgendwelche Ratschläge?

Antwort

1

Ok, ich habe dieses Problem gelöst, indem ich eine Stufe höher gegangen bin und den RadialGradientBrush selbst gebunden habe.

 <Rectangle x:Name="testRectangle" Height="100" Width="100" 
        Fill="{Binding TestRadialGradientBrush}" 
        DataContext="{Binding ElementName=HomePageUC}" > 
      </Rectangle> 

Die RadialGradientBrush wiederum wird mit den in den Farben setzen GradientStops instanziiert ich hinter im Code soll.

+0

Können Sie den Code für TestRadialGradientBrush hinterlegen? danke –

+0

Das war vor so langer Zeit. Nicht sicher, ob einer der Code relevant ist, funktioniert oder kompiliert für diese Angelegenheit. Aber Sie können den gesamten Quellcode von hier herunterladen http://www.chaitanyaonline.net/2009/08/24/changing-pie-slice-colours-in-silverlight-3-chart-control/ – Chaitanya

1

Leider können Sie das nicht tun, da Bindung an FrameworkElement und jedem Objekt, das es erbt, passiert. GradientStop ist kein FrameworkElement, das verhindert, dass die Color-Eigenschaft gebunden wird.

+0

Danke für die Antwort Kiril. Gibt es einen Workaround? zum Beispiel mit Daten/Ereignis-Triggern. – Chaitanya

Verwandte Themen