2010-11-16 75 views
0

我試着簡單地將故事板複製並粘貼到資源字典中,但它不起作用。那麼,我怎樣才能成功地將故事板動畫移動到資源字典中,以便主xaml文件儘可能乾淨且可讀?如何將silverlight故事板移動到resourceDictionary中?

這是我想對什麼是不工作可能有助於進入animationResource.xaml

<!-- the story board controlling the grid animation --> 
<Storyboard x:Name="MoveBall"> 
     <DoubleAnimation Duration="0:0:1" To="200" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.X)" Storyboard.TargetName="grid" d:IsOptimized="True"> 
      <DoubleAnimation.EasingFunction> 
       <BackEase EasingMode="EaseInOut"/> 
      </DoubleAnimation.EasingFunction> 
     </DoubleAnimation> 
    </Storyboard> 


<!-- I've left out all the other default xaml like the layoutRoot grid ---> 

<Grid x:Name="grid" HorizontalAlignment="Left" Margin="190,180,0,220" Width="80" RenderTransformOrigin="0.5,0.5"> 
     <Grid.RenderTransform> 
      <TransformGroup> 
       <ScaleTransform/> 
       <SkewTransform/> 
       <RotateTransform/> 
       <TranslateTransform/> 
      </TransformGroup> 
     </Grid.RenderTransform> 
     <Ellipse Fill="#FFF4F4F5" Stroke="Black"/> 
    </Grid> 

回答

0

更多詳細的代碼示例,但乍一看你可能會得到一個錯誤因爲Storyboard.TargetName無法解析(因爲具有該名稱的項目不再位於同一個文件中),所以嘗試啓動此故事板時會出現這種情況。

解決方法是在代碼中設置Storyboard Target(與TargetName相對),也許在包含要設置動畫的網格的對象的構造函數中設置。這可能是這樣的:

Storyboard.SetTarget(App.Current.Resources["MoveBall"] as Storyboard, grid); 

你可能也不得不要麼刪除d:IsOptomized標籤或確保該命名空間在您的資源字典的頂部定義。

值得一提的是,這使得您的Xaml稍微更具可讀性,但代價更復雜,這可能不是您想要做的折衷。