[英]DynamicResource color not working
我有以下代碼:
<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
。
我能做些什么來達到我的效果?
我需要動態設置顏色,所以只需用"{StaticResource SelectedColor}"
交換"{DynamicResource SelectedColor}"
。
我已經創建了一個很小的解決方案來演示這個問題 - Selected Tab應該是Gold color,但它實際上是透明的,因為我猜VSM無法解析名為“ SelectedColor
”的顏色
動畫(VSM)是freezable objects
。 只要在Freezable的依賴項屬性上設置綁定,就可以防止Freezable被凍結。 因此, EasingColorKeyFrame objects are preventing the storyboards from being frozen.
的Value屬性上的綁定EasingColorKeyFrame objects are preventing the storyboards from being frozen.
作為一種出路,您可以嘗試任何這三種方法,無論哪種方式最適合您 -
嘗試將資源聲明為StaticResource
並在VSM中使用它。 VSM的StaticResource解釋
我從你的代碼中理解的是你想要選擇的tabItem為金色。 因此,作為一種解決方法,您可以做的是將面板中包含的two borders
稱為網格一個,其中金色邊框默認visibility
為折疊,正常可見。 現在,在tabItem的selected event
(在IsSelected或任何方法的屬性更改)上,您可以swap the visibility
兩個邊框swap the visibility
,從而產生相同的效果。 當然,這種解決方法特定於這種情況,例如,只有當EasingColorKeyFrame鍵時間為0時才有意義,否則它不會產生相同的視覺效果。
最后,如果你想堅持通過動畫來做,你可以在code behind
實現這一點。 這些帖子可能對您有所幫助 - 動畫中的 dynamicResource, 后面的代碼 中的動畫和使用VSM設置前景的 Woakaround
這是因為VSM類型不是邏輯樹的一部分,因此無法解析動態資源查找。
我想出了一種用圖層做的方法。 制作對象的多個副本,然后只需修改透明度,如下所示:
<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>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.