免责声明:我不WPF,所以这是从其他地方发现的例子拼凑。
使用故事板,你可以动画X2
和Y2
性质是这样的:
<Storyboard>
<DoubleAnimation Storyboard.TargetName="line1" Storyboard.TargetProperty="X2" From="10" To="100" Duration="0:0:1.0"/>
<DoubleAnimation Storyboard.TargetName="line1" Storyboard.TargetProperty="Y2" From="10" To="100" Duration="0:0:1.0"/>
</Storyboard>
你怎么踢的关闭是由你。我只是将它添加到按钮控件的Button.Click
事件触发器中。
这样做是线性内插的跨越目标属性的时间等效,所以在这个例子在第二过程中的X1
和Y1
值将11
和100
之间平滑地变化。这将显示从其原点(在我的测试版本中为10,10
)沿着朝向最终端点的线延伸的线的外观100,100
。
下面是我测试的完整XAML。因为我不WPF我想到有可能是几件事情我可以做的更好:)
<Window x:Class="AnimTest.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"
xmlns:local="clr-namespace:AnimTest"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="525">
<Grid>
<Canvas HorizontalAlignment="Left" Height="300" Margin="10,10,0,0" VerticalAlignment="Top" Width="426">
<Line Name="line1" X1="10" Y1="10" X2="10" Y2="10" StrokeThickness="3" Stroke="Black"/>
</Canvas>
<Button Margin="441,279,10,10">
OK
<Button.Triggers>
<EventTrigger RoutedEvent="Button.Click">
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetName="line1" Storyboard.TargetProperty="X2" From="10" To="100" Duration="0:0:1.0"/>
<DoubleAnimation Storyboard.TargetName="line1" Storyboard.TargetProperty="Y2" From="10" To="100" Duration="0:0:1.0"/>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Button.Triggers>
</Button>
</Grid>
</Window>
我安装了通用的应用工具,并尝试了一下。事实证明,与WPF相比,他们改变了Universal Apps中的很多东西,包括在XAML中抛弃了路由事件的概念。这听起来像是一个让很多开发者烦恼的好方法,呵呵?
所以,现在不是能给出一个唯一的XAML的答案,对WPF的工作,这里有两部分XAML +代码答案通用(对W10,VS2015):
首先XAML:
<Page
x:Class="UniversalApp1.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:UniversalApp1"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d">
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<Grid.Resources>
<Storyboard x:Name="btnClick_SB" >
<DoubleAnimation Storyboard.TargetName="line1" Storyboard.TargetProperty="X2" From="10" To="400" Duration="0:0:1.0" EnableDependentAnimation="True"/>
<DoubleAnimation Storyboard.TargetName="line1" Storyboard.TargetProperty="Y2" From="10" To="400" Duration="0:0:1.0" EnableDependentAnimation="True"/>
</Storyboard>
</Grid.Resources>
<Canvas HorizontalAlignment="Left" Height="300" Margin="10,50,0,0" VerticalAlignment="Top" Width="426">
<Line Name="line1" X1="10" Y1="10" X2="10" Y2="10" StrokeThickness="3" Stroke="Black"/>
</Canvas>
<Button Margin="441,279,10,10" Click="Button_Click">OK</Button>
</Grid>
</Page>
和代码(的相关部分):
private void Button_Click(object sender, RoutedEventArgs e)
{
btnClick_SB.Stop();
btnClick_SB.Begin();
}
的btnClick_SB.Stop()
调用确保你不调用,而它已经在运行的情节串连图板,这是appare当然是一种会引发异常的禁止行为。
好吧,读一下后......创建一个'Line'对象,将'X2'和'Y2'设置为与'X1'和'Y1'相同的值,然后使用一对'DoubleAnimation'元素在故事板中随时间改变他们的价值到他们需要的地方。从来没有做过,但它听起来像它应该工作:D – Corey
嗨科里。感谢您的评论。是的,我同意你的看法,它应该可行,但你怎么做到这一点?我尝试了Storyboard.SetTargetProperty((Timeline)doubleAnimationX,new PropertyPath(“(Line.X2)”)。ToString());但正如你在这里看到的,它需要一个字符串作为第二个参数,编译器说它找不到属性X2。 –
感谢没有任何解释的任何人的投票。我以为我做了很好的解释我想要的东西。我知道我没有显示代码,但正如我在原始文章中所述,我迄今为止唯一能做的就是移动矩形,线条和椭圆。我不认为有什么理由显示这样做的代码,当这不是我想要实现的。 –