我是Expression Blend 4的新手,但遇到了一些相當簡單的問題。在Expression Blend中移動相對於其當前位置的對象
我想要一個按鈕,當按鈕被點擊時,將對象向上移動20px。我按照教程here提出建議,如果您使用故事板動畫(在開始時沒有關鍵幀)來移動對象,那麼它將播放動畫,按照計劃從當前對象的任何位置移動它(即:繼續向上移動時間按下)但是當我嘗試這個時,動畫只能用一次。
我試過在變換菜單中勾選'使用相對值'框,但它沒有區別。
我錯過了一些明顯的東西嗎?
我是Expression Blend 4的新手,但遇到了一些相當簡單的問題。在Expression Blend中移動相對於其當前位置的對象
我想要一個按鈕,當按鈕被點擊時,將對象向上移動20px。我按照教程here提出建議,如果您使用故事板動畫(在開始時沒有關鍵幀)來移動對象,那麼它將播放動畫,按照計劃從當前對象的任何位置移動它(即:繼續向上移動時間按下)但是當我嘗試這個時,動畫只能用一次。
我試過在變換菜單中勾選'使用相對值'框,但它沒有區別。
我錯過了一些明顯的東西嗎?
注意:這裏所指的點值是相對於對象的原始位置而不是特定的點值。
我認爲問題在於故事板在它一直播放時並未停止。當你建立(-20,-20)的終點時,這是相對於它的開始點。再次播放動畫(假設時間爲零時沒有關鍵幀)會將對象從其現有位置(-20,-20)移動到也是(-20,-20)的目標位置。這給出了沒有技術上不準確的動畫的外觀。如果您有一個單獨的動畫,並且零個關鍵幀沒有移動相同的對象,它將從該對象恰好位於動畫中的第一個關鍵幀開始。
如果實際停止動畫,對象將在(0,0)處返回原始值。通過添加一個不同的Button來測試這個問題,該Button發出一個Stop [我爲此使用ControlStoryboardAction行爲]。這裏是你可以用它來測試這個樣本:
<UserControl 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:i="http://schemas.microsoft.com/expression/2010/interactivity"
xmlns:ei="http://schemas.microsoft.com/expression/2010/interactions"
mc:Ignorable="d"
x:Class="Animation1.MainPage"
Width="640"
Height="480">
<UserControl.Resources>
<Storyboard x:Name="Storyboard1">
<DoubleAnimation Duration="0:0:0.8"
To="-20"
Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateX)"
Storyboard.TargetName="rectangle"
d:IsOptimized="True" />
<DoubleAnimation Duration="0:0:0.8"
To="-20"
Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateY)"
Storyboard.TargetName="rectangle"
d:IsOptimized="True" />
</Storyboard>
</UserControl.Resources>
<Grid x:Name="LayoutRoot"
Background="White">
<Button Content="Play"
HorizontalAlignment="Left"
Height="37"
Margin="35,53,0,0"
VerticalAlignment="Top"
Width="65">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<ei:ControlStoryboardAction Storyboard="{StaticResource Storyboard1}" />
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>
<Rectangle x:Name="rectangle"
Fill="#FF0303FF"
Height="99"
Margin="275,0,207,57"
Stroke="Black"
VerticalAlignment="Bottom"
RenderTransformOrigin="0.5,0.5">
<Rectangle.RenderTransform>
<CompositeTransform />
</Rectangle.RenderTransform>
</Rectangle>
<Button Content="Stop"
HorizontalAlignment="Left"
Height="40"
Margin="35,115,0,0"
VerticalAlignment="Top"
Width="65">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<ei:ControlStoryboardAction ControlStoryboardOption="Stop"
Storyboard="{StaticResource Storyboard1}" />
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>
</Grid>
我認爲你將不得不以不同的方式處理這個特殊的問題。最簡單的方法是將其放置在Canvas中並管理Top和Left值(最好通過綁定)。這個想法是捕獲故事板完成並更新綁定中的值,然後停止動畫。這應該爲下次播放動畫時提供正確的起點。對不起,我沒有時間把它放在一起,但希望這會讓你走得更遠。
謝謝你的回答。我嘗試添加一個按鈕來停止所建議的動畫,並且您是正確的 - 對象將返回到其原始位置。這種行爲是意想不到的,因爲我鏈接的教程(微軟自己的)認爲這不是它應該如何工作的。我不太確定我的Expression Blend知識是否可以嘗試您的建議,但至少我更近一步,謝謝。 – Stevemid 2012-01-31 15:20:12
你的意思是你想讓它每次點擊時移動20px,還是希望它回到原來的位置並從那裏向上移動?發佈一些代碼可能會有所幫助。 – 2012-01-27 16:37:07
我希望每次單擊按鈕時向上移動20px(向左移動20px),永不返回到原始位置。 '<故事板X:名稱= 「不正確」> \t \t \t \t \t \t \t \t' –
Stevemid
2012-01-27 16:46:05
您可以修改您的問題以包含代碼。格式化時更易讀。 – 2012-01-31 07:02:27