WPF动画窗口可见性更改

Joh*_*ohn 4 wpf animation visibility

我正在试图弄清楚如何为WPF窗口设置从Visibile到Hidden的更改动画.我目前让应用程序工作的方式是窗口通常是隐藏的,当我将鼠标移动到屏幕的一侧时,它弹出,我使用布尔到可见性转换器来做那个,但我想做什么是让应用程序在鼠标悬停时更顺畅地滑出,然后再次滑入.

我没有任何动画,所以我不知道如何做到这一点.首先,我不确定我应该使用什么动画来做这个,其次我不确定我是否应该在viewmodel中的"IsWindowVisibile"属性上触发它,或者我是否应该将它绑定到VisibilityChanged事件,第三,我当窗口大小可变时,我不确定这是否可行.

[编辑]

如果有必要,我会"采取"不透明度解决方案,但这并不是我想要的"滑动"效果.

Myk*_*iuk 12

我做了类似的事情(不透明度在2秒内变为0并且窗口隐藏):只看代码,它很简单

MainWindow.xaml:

    <Storyboard x:Key="hideMe">
        <DoubleAnimation Storyboard.TargetProperty="Opacity" Duration="0:0:2" To="0.0"/>
        <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Visibility">
            <DiscreteObjectKeyFrame KeyTime="0:0:2" Value="{x:Static Visibility.Hidden}"/>
        </ObjectAnimationUsingKeyFrames>
    </Storyboard>
    <Storyboard x:Key="showMe">
        <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Visibility">
            <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="{x:Static Visibility.Visible}"/>
        </ObjectAnimationUsingKeyFrames>
        <DoubleAnimation Storyboard.TargetProperty="Opacity" Duration="0:0:5" To="0.75"/>
    </Storyboard>
Run Code Online (Sandbox Code Playgroud)

MainWindow.xaml.cs

    public void ShowMe() {
        (FindResource("showMe") as Storyboard).Begin(this);
    }
    public void HideMe() {
        (FindResource("hideMe") as Storyboard).Begin(this);
    }
Run Code Online (Sandbox Code Playgroud)

只需调用HideMe()ShowMe()代替设置Visibility = Visibility.Hidden代码

编辑

移动窗口时WPF很慢,所以如果你需要滑动动画:

  1. 制作透明窗口(AllowsTransparency="True" Background="Transparent" WindowStyle="None")

  2. 将所有控件放在不透明面板上(Background="{StaticResource {x:Static SystemColors.ControlBrushKey}}")

  3. 此面板的动画Margin.Left0到窗口ActualWidth,然后隐藏窗口-这将删除保存窗口大小的问题