我想在&淡入淡出与弹出菜单组合。幻灯片是在HorizontalOffset
上使用DoubleAnimation
实现的,并且在没有淡入动画的情况下工作良好。一旦我们将";"褪色";动画通过PopupAnimation="Fade"
,然后滑出停止工作。我认为这是因为";IsOpen";现在为false,并且弹出窗口已被删除(与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动画属性的子项不使用名称(-有绑定错误
<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 非常陌生(或生疏(
我在这里偶然发现了一个答案:我可以';t在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;
}
}