2011-03-14 71 views
2

我有簡單的圖形圖像,我想要在觸發的事件上轉換。變換意味着改變寬度或將其移動到另一個位置。WPF圖像轉換

現在我使用工具箱和動畫通過Storyboard的Image元素,例如DoubleAnimation或ThicknessAnimation。

然而以下問題出現:

  1. 圖像改變寬度
  2. 圖像質量發生變化,不支持WPF矢量圖形時閃爍?

關於1.我的問題是,如果應該使用其他動畫。


所以,我試圖轉變,看到代碼:

<Image Height="150" HorizontalAlignment="Left" Margin="12,0,0,0" Name="image1" Stretch="Fill" VerticalAlignment="Top" Source="images/side_view.jpg" Width="1244"> 
     <Image.RenderTransform> 
      <ScaleTransform x:Name="Minimize" ScaleX="1.0" ScaleY="1.0"/> 
     </Image.RenderTransform> 
    </Image> 

    <Button Content="Next Train" Height="23" HorizontalAlignment="Left" Margin="528,233,0,0" Name="btnNext" VerticalAlignment="Top" Width="75" /> 
    <Grid.Triggers> 
     <EventTrigger RoutedEvent="Button.Click" SourceName="btnNext"> 
      <BeginStoryboard> 
       <Storyboard TargetName="Minimize" TargetProperty="ScaleX"> 
        <DoubleAnimation To="0.65" Duration="0:0:2"/> 
       </Storyboard> 
      </BeginStoryboard> 
     </EventTrigger> 

的工作方式相同餘施加到的寬度和餘量的動畫。但是,它仍然在閃爍!有沒有合理的解釋?

回答

2

如果您正在爲圖像的寬度設置動畫,那麼您就是讓WPF重新渲染圖像,並且每次都從scatch創建圖像。它經歷了佈局過程和渲染過程,這使得它閃爍並且不能像最好的那樣工作。

這裏最好的選擇是動畫ScaleTransform。 ScaleTransform完全通過DirectX以硬件完成,因此其速度非常快,不會閃爍,圖像質量應該保持基本相同。 (除非當然你正在調整它大幅度在這種情況下,你會失去祕密。)

+0

@ eldad-katz:我試過ScaleTransform,但結果是一樣的 - 任何想法? – 2011-03-14 13:39:03

+0

它應該按照建議工作。在你放的代碼中,我沒有看到名爲Minimize的ScaleTransform ..但無論如何,它應該完美工作。你確定你正在做的是動畫ScaleTransform嗎? – 2011-03-14 13:53:23

+0

@ elad-katz:你說得對,我把錯誤的代碼放在一起。然而,他們沒有太大的差異,我編輯了它。也許它已經很好,但它不符合我的想象。這是完整的代碼:http://pastebin.com/cYx5exFx – 2011-03-14 14:27:59