Я пытаюсь привязать цвет 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)
Я также пробовал передавать строку «Красный», «Синий» и т. Д. Вместо объекта цвета. Но привязка, похоже, не работает.
Любой совет?
2 ответа
Хорошо, я решил эту проблему, поднявшись на один уровень выше и привязав сам RadialGradientBrush к данным.
<Rectangle x:Name="testRectangle" Height="100" Width="100"
Fill="{Binding TestRadialGradientBrush}"
DataContext="{Binding ElementName=HomePageUC}" >
</Rectangle>
RadialGradientBrush, в свою очередь, создается с GradientStops, установленным на цвета, которые я хочу в коде позади.
К сожалению, вы не можете этого сделать, поскольку привязка выполняется для FrameworkElement и каждого объекта, который его наследует. GradientStop не является FrameworkElement, что не позволяет привязать его свойство Color.
Похожие вопросы
Связанные вопросы
Новые вопросы
.net
НЕ используйте для вопросов о .NET Core - используйте вместо этого [.net-core]. .NET Framework - это программная среда, предназначенная главным образом для операционной системы Microsoft Windows. Он включает в себя реализацию библиотеки базовых классов, общеязыковой среды выполнения (обычно называемой CLR), общей системы типов (обычно называемой CTS) и динамической среды исполнения. Он поддерживает множество языков программирования, включая C #, VB.NET, F # и C ++ / CLI.