亲爱的,我在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
中注释掉前两行,并取消注释其余资源),则动态资源访问将起作用。<LinearColorKeyFrame KeyTime="0:0:1" Value="{DynamicResource MyColor}"/>
转换为过程代码,因为LinearColorKeyFrame
不是FrameworkElement
。也许这是问题的根源?答案 0 :(得分:1)
我不知道是否有办法使用XAML和绑定,我无法在Silverlight中使用类似的东西,但作为一种解决方法,您可以在代码中创建StoryBoard和动画: http://msdn.microsoft.com/en-us/library/cc189069(VS.95).aspx#procedural_code