【发布时间】:2010-11-26 19:56:08
【问题描述】:
亲爱的,我在 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/WPF 4 中的行为是相同的。
- 我尝试从后面的代码创建故事板(仅用于测试),但无法将行
<LinearColorKeyFrame KeyTime="0:0:1" Value="{DynamicResource MyColor}"/>转换为程序代码,因为LinearColorKeyFrame不是FrameworkElement。也许这是问题的根源?
【问题讨论】: