亲爱的各位,我对WPF 3.5有以下问题。在序列图像板中访问动态资源时,在包含目标控件的窗口中定义资源时,该值是错误的(似乎未解析引用)。
我做错了什么,有没有正确的方法(或者至少是解决方法)?基本上我希望故事板使用来自动态资源的颜色,并且我只能将这些资源放在窗口级别的本地。
示例代码:
<Window
x:Class="Test.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300"
MouseDoubleClick="Window_MouseDoubleClick">
<Window.Resources>
<Color x:Key="MyColor">Blue</Color>
</Window.Resources>
<Grid x:Name="outer">
<Grid.Resources>
<Storyboard x:Key="MyBoard">
<ColorAnimationUsingKeyFrames
Storyboard.TargetProperty="(Panel.Background).(SolidColorBrush.Color)">
<LinearColorKeyFrame KeyTime="0:0:0" Value="Red"/>
<LinearColorKeyFrame KeyTime="0:0:1" Value="{DynamicResource MyColor}"/>
</ColorAnimationUsingKeyFrames>
</Storyboard>
<SolidColorBrush x:Key="MyBrush" Color="{DynamicResource MyColor}"/>
</Grid.Resources>
<Grid x:Name="inner" Background="Green"/>
</Grid>
</Window>
代码隐藏:
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
}
private void Window_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
Storyboard s = (Storyboard)outer.FindResource("MyBoard");
inner.BeginStoryboard(s);
//SolidColorBrush b = (SolidColorBrush)outer.FindResource("MyBrush");
//inner.Background = b;
}
}
问题是
Value="{DynamicResource MyColor}"
不起作用,值是透明的。
我尝试了以下方法:
-
如果我把
MyColor
从窗口资源到应用程序资源,代码按预期工作。
-
如果我替换故事板,从分配另一个资源开始(注释掉前两行
Window_MouseDoubleClick
,并取消注释其余部分),动态资源访问工作正常。
-
.NET 4/wpf4中的行为是相同的。
-
我试着从后面的代码创建故事板(只是为了测试),但无法转换行
<LinearColorKeyFrame KeyTime="0:0:1" Value="{DynamicResource MyColor}"/>
进入程序代码,因为
LinearColorKeyFrame
不是
FrameworkElement
. 也许这就是问题的根源?