我想动画从屏幕右边缘进入的窗口。
这是我的xaml
<Window x:Class="SidebarTest.DockWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="DockWindow" Width="275"
ShowInTaskbar="False"
WindowStyle="None" ResizeMode="NoResize"
AllowsTransparency="True" Background="Transparent" >
<Window.Triggers>
<EventTrigger RoutedEvent="Window.Loaded">
<BeginStoryboard>
<Storyboard >
<DoubleAnimation Duration="0:0:1.5" Storyboard.TargetProperty="Width" From="0" To="275" AccelerationRatio=".1"/>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Window.Triggers>
<Grid Background="#2F2F2F">
</Grid>
但它从左到右而不是从右到左动画宽度。 像这样:
我怎样才能改变这一点,从边缘进入呢?
答案 0 :(得分:1)
在你的代码隐藏中,
public DockWindow()
{
InitializeComponent();
this.Left = this.Width + SystemParameters.FullPrimaryScreenWidth;
}
将您的触发器更改为
<Window.Triggers>
<EventTrigger RoutedEvent="Window.Loaded">
<BeginStoryboard>
<Storyboard >
<DoubleAnimation Duration="0:0:1.5" Storyboard.TargetProperty="Left" To="10" AccelerationRatio=".1"/>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Window.Triggers>
答案 1 :(得分:1)
我没有尝试缩放宽度,而是建议将宽度固定并将TranslateTransform
应用于Window
本身,实际上是从屏幕外滑动。下面提供了一个快速而肮脏的示例,您可能希望使用X
坐标和KeyTime
的值来使效果恰到好处,但希望这对您有所帮助。干杯
<Window.RenderTransform>
<TranslateTransform x:Name="SlideTheThingy" X="1000" />
</Window.RenderTransform>
<Window.Triggers>
<EventTrigger RoutedEvent="Window.Loaded">
<BeginStoryboard>
<Storyboard>
<DoubleAnimationUsingKeyFrames Storyboard.TargetName="SlideTheThingy"
Storyboard.TargetProperty="X">
<SplineDoubleKeyFrame KeyTime="0:0:1.25" Value="0" />
</DoubleAnimationUsingKeyFrames>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Window.Triggers>
答案 2 :(得分:0)
Windows按其左上角定位。因此,当您为宽度设置动画并且位置保持不变时,窗口将自然地增长到正确的
为了获得您正在寻找的效果,您还需要使用.Left
属性为窗口的位置设置动画。如果要将窗口捕捉到屏幕右侧并从那里滑入,则需要使用与屏幕宽度(和零像素宽度)匹配的值Left
开始设置动画,然后动画为screenWidth - finalWidthOfWindow
。
答案 3 :(得分:0)
我实际想通了,我需要将水平对齐设置到我想要设置动画大小的组件的右侧。它就像一个魅力!