我正在尝试将silverlight 3中RadialGradientBrush的颜色数据绑定到属性,但似乎无法让它工作。
例如,在我所拥有的示例测试应用程序中
<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>
在后面的代码中,我甚至使它们成为依赖属性,就像这样..
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); }
}
但是这仍然给了我非常无益的AG_E_PARSER_BAD_PROPERTY_VALUE异常。如果我取消注释颜色是硬编码的两条Xaml线,它可以正常工作。我知道属性很好,因为如果我硬编码颜色或注释矩形,它会显示文本。 (通过绑定到TextBlock)
我也试过传入字符串“Red”,“Blue”等而不是颜色对象。但绑定似乎不起作用。
有什么建议吗?
答案 0 :(得分:1)
不幸的是,你不能这样做,因为Binding发生在FrameworkElement和继承它的每个对象上。 GradientStop不是FrameworkElement,它会阻止您绑定其Color属性。
答案 1 :(得分:1)
好的,我通过提高一级并对RadialGradientBrush本身进行数据绑定来解决这个问题。
<Rectangle x:Name="testRectangle" Height="100" Width="100"
Fill="{Binding TestRadialGradientBrush}"
DataContext="{Binding ElementName=HomePageUC}" >
</Rectangle>
RadialGradientBrush依次实例化,GradientStops设置为后面代码中我想要的颜色。