免責聲明:我不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。 –
感謝沒有任何解釋的任何人的投票。我以爲我做了很好的解釋我想要的東西。我知道我沒有顯示代碼,但正如我在原始文章中所述,我迄今爲止唯一能做的就是移動矩形,線條和橢圓。我不認爲有什麼理由顯示這樣做的代碼,當這不是我想要實現的。 –