为什么Window代码中的以下事件无效?
void about_Click(object sender, RoutedEventArgs e)
{
// TopLevel.Opacity = 1.0, Splashscreen.Opacity = 0.0
TopLevel.Opacity = 0.1;
// still: TopLevel.Opacity = 1.0
Splashscreen.Opacity = 1.0;
// still: Splashscreen.Opacity = 0.0
}
不透明度值不会改变。
我发现以下触发器是我的问题的原因:
<Window.Triggers>
<EventTrigger RoutedEvent="FrameworkElement.Loaded">
<BeginStoryboard Storyboard="{StaticResource splashscreenanimation}" />
</EventTrigger>
</Window.Triggers>
当我删除它时,代码隐藏正在运行。
为了完整性,这是动画:
<Window.Resources>
<Storyboard x:Key="splashscreenanimation">
<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Opacity)"
Storyboard.TargetName="Splashscreen"
BeginTime="0:0:0.900">
<EasingDoubleKeyFrame KeyTime="0:0:1.5"
Value="0" />
</DoubleAnimationUsingKeyFrames>
<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Opacity)"
Storyboard.TargetName="TopLevel"
BeginTime="0:0:0.900">
<EasingDoubleKeyFrame KeyTime="0:0:1.5"
Value="1" />
</DoubleAnimationUsingKeyFrames>
</Storyboard>
</Window.Resources>
Solution:在后面的代码中,您可以先删除动画:Splashscreen.BeginAnimation(UserControl.OpacityProperty, null);
(Splashscreen是UserControl)。
我还尝试将FillBehavior="HoldEnd"
或FillBehavior="Stop"
添加到故事板但是没有让它正常工作。
答案 0 :(得分:4)
再次提及依赖属性值优先级的相同问题。
看看优先事项。
物业系统强制。
动态动画或具有保留行为的动画。为了产生任何实际效果,属性的动画必须能够优先于基础(非动画)值,即使该值是在本地设置的。
本地价值。可以通过“wrapper”属性的方便来设置本地值,该属性也等同于在XAML中设置为属性或属性元素,或者通过使用特定实例的属性调用SetValue API。
在你的情况下,动画接管。
这里的代码是#3。您正在设置本地值,但动画仍然接管。
void about_Click(object sender, RoutedEventArgs e)
{
// TopLevel.Opacity = 1.0, Splashscreen.Opacity = 0.0
TopLevel.Opacity = 0.1;
// still: TopLevel.Opacity = 1.0
Splashscreen.Opacity = 1.0;
// still: Splashscreen.Opacity = 0.0
}
我希望你现在终于明白优先事项是如何运作的。 :) :) :))