[英]WPF: Animating Popup opacity using Storyboard
我想动画一个水平滑入和淡入淡出结合弹出。 幻灯片是在HorizontalOffset
ntalOffset 上使用DoubleAnimation
实现的,并且工作正常,没有褪色 animation。 一旦我们通过PopupAnimation="Fade"
添加“淡入淡出” animation 然后滑出停止工作。 我认为这是因为“IsOpen”现在为假并且弹出窗口已被删除(与PopupAnimation="Slide"
没有滑出的方式非常相似)。
没问题,我想,我只会手动为不透明度设置动画,并在关闭时稍微延迟为“IsOpen”设置动画。
我知道我们不能直接为不透明度设置动画,因为需要影响子元素不透明度。
使用此元素:
<local:AirspacePopup
x:Name="ControlsWindow"
...
>
<Grid>
<Image Name="KeyMap" ... />
</Grid>
<local:AirspacePopup.Style>
<Style TargetType="local:AirspacePopup">
<Style.Triggers>
<DataTrigger Binding="{Binding ShowViewControls}" Value="True">
...Animations go here
我尝试了以下方法:
直接绑定到图像 - 有绑定错误
<DoubleAnimation
Storyboard.Target="{Binding ElementName=KeyMap}"
Storyboard.TargetProperty="Opacity"
From="0" To="1" Duration="0:0:0.30" />
绑定到弹出子项(又名WPF 不使用 Name 的子项的动画属性)- 有绑定错误
<DoubleAnimation
Storyboard.Target="{Binding ElementName=ControlsWindow, Path=Children[0]}}"
Storyboard.TargetProperty="Opacity"
From="0" To="1" Duration="0:0:0.30" />
并在代码隐藏中创建一个属性以将该属性转发给孩子。 没有错误,但 C# 中的断点从未被命中
<DoubleAnimation
Storyboard.TargetProperty="ChildOpacity"
From="0" To="1" Duration="0:0:0.30" />
public double ChildOpacity
{
get => Child.Opacity;
set {
SetValue(ChildOpacityProperty, value);
Child.Opacity = value;
}
}
我完全没有想法 - 我还没有尝试过什么?
注意:如果不清楚,我在 WPF 中非常新(或生锈)
我在这里偶然发现了一个答案: 我无法在 WPF 中为自定义属性设置动画
ViewModel 中的属性是动画的,只是不是通过访问器 (?)。 添加OnPropertyChanged
处理程序允许我捕捉更改并做出适当的反应
public double ChildOpacity
{
get => Child.Opacity;
set => SetValue(ChildOpacityProperty, value);
}
protected override void OnPropertyChanged(DependencyPropertyChangedEventArgs e)
{
base.OnPropertyChanged(e);
if (e.Property == ChildOpacityProperty)
{
Child.Opacity = (double)e.NewValue;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.