Я пытаюсь привязать цвет RadialGradientBrush в silverlight 3 к свойству, но просто не могу заставить его работать.

Например, в образце тестового приложения все, что у меня есть, это

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

Я также пробовал передавать строку «Красный», «Синий» и т. Д. Вместо объекта цвета. Но привязка, похоже, не работает.

Любой совет?

1
Chaitanya 3 Авг 2009 в 08:44

2 ответа

Лучший ответ

Хорошо, я решил эту проблему, поднявшись на один уровень выше и привязав сам RadialGradientBrush к данным.

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

RadialGradientBrush, в свою очередь, создается с GradientStops, установленным на цвета, которые я хочу в коде позади.

1
Chaitanya 7 Авг 2009 в 08:58
Можете ли вы добавить код для TestRadialGradientBrush? Благодарность
 – 
Alaa'
22 Апр 2014 в 21:29
Это было очень давно. Не уверен, что какой-либо код актуален, работает или даже компилируется в этом отношении. Но вы можете скачать весь исходный код отсюда chaitanyaonline.net/2009/08/24/…
 – 
Chaitanya
23 Апр 2014 в 05:40

К сожалению, вы не можете этого сделать, поскольку привязка выполняется для FrameworkElement и каждого объекта, который его наследует. GradientStop не является FrameworkElement, что не позволяет привязать его свойство Color.

1
Kiril Stanoev 5 Авг 2009 в 11:07
Спасибо за ответ, Кирилл. Так есть ли обходной путь? используя, например, триггеры данных / событий.
 – 
Chaitanya
6 Авг 2009 в 03:09