2011-02-03 134 views
2

我使用两种文本颜色ColorA和ColorB创建自定义控件。 ColorA连接到控件的Foreground属性,并将ColorB连线到名为ForegroundAlt的自定义依赖项属性。这两个属性都是Brush对象。该控件的XAML获得使用该标记的属性值:XAML:将笔刷转换为颜色?

<SolidColorBrush x:Key="BrushA" Color="{Binding Path=Foreground, RelativeSource={RelativeSource TemplatedParent}}" /> 

<SolidColorBrush x:Key="BrushB" Color="{Binding Path=ForegroundAlt, RelativeSource={RelativeSource TemplatedParent}}" /> 

我需要动画两种颜色间的中小企业的文本在控制模板,这就是我遇到的问题。

通常情况下,我会简单地创建一个数据绑定到每个Brush.Color财产,像这样:

To="{Binding Source={StaticResource BrushB}, Path=Color}" 

但是,这不会在这里工作。事实证明,you can't use bindings on an animation inside a control template

作为一种变通方法,我想打造一双Color资源使用画笔资源附和:

<Color x:Key="ColorA" ??? /> 
<Color x:Key="ColorB" ??? /> 

每个Color资源应该有其相应的画笔的颜色。然后,我可以将这些颜色作为静态资源引用,并避免在动画中绑定数据。

所以,这里是我的问题:

- 我怎么会宣布Color资源?

- 有没有简单的方法来完成工作?

感谢您的帮助。

回答

0

如果我已经正确地理解了这一点,你所尝试的将无法工作。即使您将颜色定义为资源,您仍然必须将它们绑定到画笔资源,而您又回到了原点!

一个解决方案是在代码后面执行,而不是在模板中执行。由于您构建的自定义控件应该非常简单,可以将其添加到后面的代码中,而不会影响设计。

+0

我认为它会工作,只要我不在动画中使用数据绑定。但我正在研究一种避免第二对资源的更好方法。如果它有效,我会在这里发布。 – 2011-02-03 16:05:31