Приложение
похоже на приложение Sna git, которое всплывает из верхнего края экрана при наведении курсора. Все отлично работает, в том числе анимации и др. c. пока я не изменю разрешение экрана или пока я не работаю в среде с несколькими экранами, меняю расположение экранов. Затем приложение останавливается при первой анимации и меняет цвет фона на цвет, который должен отображаться, когда приложение находится в верхнем положении (убрано). Извините за запутанное описание, я приложил несколько скриншотов и код.
. Net 4.7.2
1-е изображение показывает приложение, как оно должно работать с серым фоном в ползунковом положении при наведении курсора.
2-й изображение показывает испорченное приложение после изменения разрешения или многоэкранного макета - заморожено в ползунковом положении на красном фоне - при наведении курсора проблема будет устранена.
3-е изображение показывает правильный красный цвет приложения в убранном положении.
4-й gif показывает правильную анимацию при включенной и отключенной мыши , При первом запуске окно сдвигается вниз (чтобы показать пользователю, где оно находится) и сдвигается назад - это всегда происходит при запуске.
5th gif показывает, как приложение зависает после изменения разрешения, зависание снимает блокировку и приложение снова работает.
Раскадровка XAML ниже с анимацией при запуске, при наведении курсора и т. Д. c.
<Window x:Class="DockPanel.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
Icon="DockPanel.ico"
Title="MainWindow" Name="DockPanel" Height="275" Width="530"
Background="Transparent" MouseDown="Window_MouseDown" WindowStyle="None" AllowsTransparency="True"
WindowStartupLocation="Manual"
Top="-241" ShowInTaskbar="False" Topmost="True">
<Window.Resources>
<!-- Startup animation - when program starts -->
<Storyboard x:Key="WindowDownStartup">
<!-- Slide down -->
<DoubleAnimationUsingKeyFrames BeginTime="0:0:0.3" DecelerationRatio="0.8" Duration="0:0:0.4"
Storyboard.TargetProperty="(Window.Top)" Storyboard.TargetName="DockPanel">
<EasingDoubleKeyFrame Value="0">
<EasingDoubleKeyFrame.EasingFunction>
<PowerEase Power="4" EasingMode="EaseInOut"/>
</EasingDoubleKeyFrame.EasingFunction>
</EasingDoubleKeyFrame>
</DoubleAnimationUsingKeyFrames>
<!--Slide up the window-->
<DoubleAnimationUsingKeyFrames BeginTime="0:0:1.0" DecelerationRatio="0.8" Duration="0:0:0.4"
Storyboard.TargetProperty="(Window.Top)" Storyboard.TargetName="DockPanel">
<EasingDoubleKeyFrame Value="-264">
<EasingDoubleKeyFrame.EasingFunction>
<PowerEase Power="2" EasingMode="EaseInOut"/>
</EasingDoubleKeyFrame.EasingFunction>
</EasingDoubleKeyFrame>
</DoubleAnimationUsingKeyFrames>
<!-- Change color to Red when up -->
<ColorAnimationUsingKeyFrames BeginTime="0:0:1.5" Storyboard.TargetName="MyApp"
Storyboard.TargetProperty="(Panel.Background).(SolidColorBrush.Color)">
<LinearColorKeyFrame Value="{StaticResource BackgroundRedAnimateUp}" KeyTime="00:00:0.3" />
</ColorAnimationUsingKeyFrames>
</Storyboard>
<!-- Animation when mouse over -->
<Storyboard x:Key="WindowDown">
<!-- Change window background color to default when window down -->
<ColorAnimationUsingKeyFrames BeginTime="0:0:0.3" Storyboard.TargetName="MyApp"
Storyboard.TargetProperty="(Panel.Background).(SolidColorBrush.Color)">
<LinearColorKeyFrame Value="{StaticResource BackgroundDefault}" KeyTime="00:00:0.2" />
</ColorAnimationUsingKeyFrames>
<!-- Slide window down to 0 -->
<DoubleAnimationUsingKeyFrames BeginTime="0:0:0.6" Duration="0:0:0.4" DecelerationRatio="0.8"
Storyboard.TargetProperty="(Window.Top)" Storyboard.TargetName="DockPanel" >
<EasingDoubleKeyFrame Value="0">
<EasingDoubleKeyFrame.EasingFunction>
<PowerEase Power="3" EasingMode="EaseInOut"/>
</EasingDoubleKeyFrame.EasingFunction>
</EasingDoubleKeyFrame>
</DoubleAnimationUsingKeyFrames>
</Storyboard>
<!-- Animation when mouse leave -->
<Storyboard x:Key="WindowUp" Completed="StoryboardWindowUp_Completed">
<!-- Slide window up to -219 -->
<DoubleAnimationUsingKeyFrames BeginTime="0:0:0.4" DecelerationRatio="0.8" Duration="0:0:0.4"
Storyboard.TargetProperty="(Window.Top)" Storyboard.TargetName="DockPanel">
<EasingDoubleKeyFrame Value="-264">
<EasingDoubleKeyFrame.EasingFunction>
<PowerEase Power="2" EasingMode="EaseInOut"/>
</EasingDoubleKeyFrame.EasingFunction>
</EasingDoubleKeyFrame>
</DoubleAnimationUsingKeyFrames>
<!-- Change background color to Red after window is up -->
<ColorAnimationUsingKeyFrames BeginTime="0:0:1.0" Storyboard.TargetName="MyApp"
Storyboard.TargetProperty="(Panel.Background).(SolidColorBrush.Color)">
<LinearColorKeyFrame Value="{StaticResource BackgroundRedAnimateUp}" KeyTime="00:00:0.4" />
</ColorAnimationUsingKeyFrames>
</Storyboard>
<!--Change the window size to 550-->
<Storyboard x:Key="ExtendWindow">
<DoubleAnimation BeginTime="0:0:0.3" Duration="00:00:0.3" AccelerationRatio="0.4" DecelerationRatio="0.6"
From="530" To="580" Storyboard.TargetProperty="(Window.Width)" Storyboard.TargetName="DockPanel"/>
</Storyboard>
<!--Change the window size back to original size-->
<Storyboard x:Key="RetractWindow">
<DoubleAnimation BeginTime="0:0:0.3" Duration="00:00:0.3" AccelerationRatio="0.4" DecelerationRatio="0.6"
From="580" To="530" Storyboard.TargetProperty="(Window.Width)" Storyboard.TargetName="DockPanel"/>
</Storyboard>
</Window.Resources>
<Window.Triggers>
<EventTrigger RoutedEvent="FrameworkElement.Loaded">
<BeginStoryboard Storyboard="{StaticResource WindowDownStartup}"/>
</EventTrigger>
<EventTrigger RoutedEvent="UIElement.MouseEnter">
<BeginStoryboard Storyboard="{StaticResource WindowDown}"/>
</EventTrigger>
<EventTrigger RoutedEvent="UIElement.MouseLeave">
<BeginStoryboard Storyboard="{StaticResource WindowUp}"/>
</EventTrigger>
</Window.Triggers>
Любые идеи высоко ценятся.