2012-04-17 83 views
2

我有以下代碼:DynamicResource顏色不工作

<Color x:Key="SelectedColor">Gold</Color> 

而一個TabItem的風格,包含顏色

<VisualState x:Name="Selected"> 
    <Storyboard> 
     <ColorAnimationUsingKeyFrames 
      Storyboard.TargetProperty="(Shape.Fill).(GradientBrush.GradientStops)[0].(GradientStop.Color)" 
      Storyboard.TargetName="InnerRectangle2"> 
      <EasingColorKeyFrame KeyTime="0" Value="{DynamicResource SelectedColor}"/> 
     </ColorAnimationUsingKeyFrames> 

原來我不能上EasingColorKeyFrame使用DynamicResource
我能做些什麼來達到我的效果?

我需要動態設置顏色,所以只需交換"{DynamicResource SelectedColor}""{StaticResource SelectedColor}"即可。

我創建了一個微小的解決方案,以說明問題 - 所選標籤應該是金色的,但實際上它是透明的,因爲我想VSM無法解析名爲「SelectedColor

http://dl.dropbox.com/u/10557283/DynamicBug.zip

顏色
+0

http://stackoverflow.com/a/10196078/452941 – 2012-04-17 17:58:18

回答

2

我想出了一個辦法與層做到這一點。讓你的對象的多個副本,然後只需修改這樣的透明膠片:

<VisualState x:Name="Selected"> 
    <Storyboard> 
     <DoubleAnimation Storyboard.TargetName="InnerRectangleBorder" 
         Storyboard.TargetProperty="Opacity" 
         To="0" 
         Duration="0:0:0" /> 

     <DoubleAnimation Storyboard.TargetName="InnerRectangleBorderMouseOver" 
         Storyboard.TargetProperty="Opacity" 
         To="0" 
         Duration="0:0:0.5" /> 

     <DoubleAnimation Storyboard.TargetName="InnerRectangleBorderSelected" 
         Storyboard.TargetProperty="Opacity" 
         To="1" 
         Duration="0:0:1" /> 
    </Storyboard> 
</VisualState> 
3

這是因爲VSM類型不是邏輯樹的一部分,所以無法解析動態資源查找。

+0

我應該如何改變我的代碼來解決這個問題? – 0x4f3759df 2012-04-17 18:38:26

+0

@iterationx:使用StaticResource。 – Phil 2012-04-26 18:26:11

+0

@Phil我想在運行時更改顏色 – 0x4f3759df 2012-04-26 18:29:25

5

動畫(VSM)爲freezable objects。只要您在Freezable的依賴項屬性上設置綁定,就可以防止Freezable被凍結。因此,在你的EasingColorKeyFrame objects are preventing the storyboards from being frozen.

Value屬性的綁定作爲一個出路,你可以嘗試一下這三種方法哪個最適合你 -

  • 嘗試宣告資源作爲StaticResource,並用它在你的VSM。 StaticResource explanation for VSM

  • 我從你的代碼中瞭解到的是你想要金黃色的選定tabItem。所以,作爲一種解決方法,您可以做的是讓面板中包含的two borders表示網格相互之間具有金色邊框默認值visibility,這是摺疊的,正常的可見。 現在,在selected event(關於IsSelected或任何aproach的財產變化)你的tabItem你可以swap the visibility兩個邊界給予相同的效果。當然這個解決方法是特定於這種情況的,例如它只有在EasingColorKeyFrame關鍵時間爲0時纔有意義,否則它不會產生相同的視覺效果。

  • 最後,如果你想堅持通過動畫來做到這一點,你可以在code behind中實現。這些職位可能被證明對您有所幫助 - Woakaround for dynamicResource in AnimationAnimation in code behindSetting foreground with VSM

+0

黃金只是默認顏色,我希望它是動態設置的,我認爲這排除了前兩點,仍然在考慮第三點, – 0x4f3759df 2012-07-23 21:42:07

+1

你把我放在正確的道路上,所以我給了你點數。 – 0x4f3759df 2012-07-24 21:13:50