首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在银光中绑定GradientStop颜色或GradientStops属性?

如何在银光中绑定GradientStop颜色或GradientStops属性?
EN

Stack Overflow用户
提问于 2009-10-03 14:37:32
回答 4查看 8K关注 0票数 6

我希望在Silverlight中有一个动态的渐变,如下所示:

代码语言:javascript
复制
<RadialGradientBrush GradientOrigin="0.20,0.5" Center="0.25,0.50" 
                     RadiusX="0.75" RadiusY="0.5">
  <GradientStop Color="{Binding Path=GradientStart}" Offset="0" />
  <GradientStop Color="{Binding Path=GradientEnd}" Offset="1" />
</RadialGradientBrush>

我绑定到两个返回类型"Color“的属性,但是我总是收到以下消息:

代码语言:javascript
复制
AG_E_PARSER_BAD_PROPERTY_VALUE

如果我试图绑定到一个GradientStop集合,这也有同样的问题,这个问题的解决方案是什么:

  1. 允许在运行时更改渐变的开始和结束,
  2. 工作在Silverlight 3.0中,而不是WPF解决方案

如果有工作要重复这种行为--这是可以接受的--我有一些与LinearGradients一起工作的解决方案,因为我可以将一些“填充”属性绑定到它上--但是在这种情况下不起作用,而且可能还有其他渐变类型我可能会使用,其他的也可能在将来使用,这个解决方案/替代方案将适用于这些类型。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-10-03 20:13:41

问题是GradientStop不是从派生的,因此不能绑定数据。不幸的是,这意味着您必须从代码中设置它。

票数 14
EN

Stack Overflow用户

发布于 2009-10-04 13:50:28

要真正做到这一点,你有两个选择。

将显示项刷属性绑定到数据中的刷属性。

让数据源携带一个属性,该属性公开您希望对每个项使用的画笔,并绑定使用该画笔的显示项的属性,例如Fill属性。如果开始值和停止值对的不同值集很小,则此操作是有效的。您将为每对刷子创建一个实例,然后数据项将公开正确的画笔。

使用值转换器绑定显示项刷属性

如果您的开始和停止值的变量更多,您将需要一个新的实例刷子类型为每个显示的项目。在这种情况下,可以使用值转换器绑定显示项画笔属性,例如:-

代码语言:javascript
复制
 <Rectangle Fill="{Binding Converter={StaticResource MyBrushBuilder} }" ... >

有关构建转换器的完整说明,请参阅此answer

在这种情况下,虽然您的转换方法实现如下所示:

代码语言:javascript
复制
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
  YourItemsType item = (YourItemsType)value;

  var start = new GradientStop();
  start.Offset = 0;
  start.Color = item.GradientStart;

  var stop = new GradientStop();
  stop.Offset = 1;
  stop.Color = item.GradientStop;

  var result = new RadialGradientBrush();
  result.GradientOrigin = new Point(0.20, 0.5);
  result.Center = new Point(0.25, 0.5);
  result.RadiusX = 0.75;
  result.RadiusY = 0.5;
  result.GradientStops = new GradientStopCollection();
  result.GradientStops.Add(start);
  result.GradientStops.Add(stop);

  return result;
}

警告

每当发生数据绑定时,都会为每个项创建一整串画笔。这可能是昂贵和不受欢迎的。因此,如果认为这种绑定转换方法是必要的,那么我建议您使用笔刷的静态字典。这本词典的关键是这两种颜色的散列。您只会在必要时创建一个新的画笔,并在可能的情况下重用以前创建的画笔。

票数 5
EN

Stack Overflow用户

发布于 2009-10-03 15:02:34

您是否确认了定义梯度刷的DataContext类型?由于您还没有在绑定中指定Source,所以默认情况下它将使用DataContext

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1513892

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档