簡體   English   中英

DynamicResource顏色不起作用

[英]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 ”的顏色

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

動畫(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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM