2009-02-17 122 views
7

我有一個視覺刷,它是一組形狀,其​​主要顏色是動態資源本身 - 所以形狀是例如MyShape和由Shape對象引用的Color,MyColour。
我的問題是,當我更新顏色 - 這隻發生在第一次加載形狀(顏色需要先設置),但儘可能多我改變顏色,它不會更新動態資源使用顏色 - 我該如何做這項工作?
只需要使動態資源在另一個動態資源中工作,並在更改顏色時讓它們都更新。
我不知道如何得到這個工作 - 我花了時間爲WPF創建一個顏色選擇器只發現我不能改變這個項目的顏色 - 1層資源工作,我直接設置畫筆/顏色,但沒有另一個對象或2層資源中的顏色。如何更新動態資源中的動態資源?

編輯:我的問題似乎是特定於在一個單獨的資源/字典中使用這些,因爲我的程序需要從類而不是窗口訪問此項目,所提到的主要示例不起作用,當MyColor是在單獨資源。

回答

5

除非我誤解了這種情況,否則正是你所說的工作很好。我只是嘗試了一下與此XAML:

<Window x:Class="ConditionalTest.Window1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="Window1" Height="300" Width="300"> 

    <Window.Resources> 
     <SolidColorBrush x:Key="MyColor" Color="Aqua" /> 

     <VisualBrush x:Key="MyBrush"> 
      <VisualBrush.Visual> 
       <Ellipse Height="50" Width="100" Fill="{DynamicResource MyColor}" /> 
      </VisualBrush.Visual> 
     </VisualBrush> 
    </Window.Resources> 
    <Grid Background="{DynamicResource MyBrush}"> 
     <Button Height="30" Width="Auto" VerticalAlignment="Center" HorizontalAlignment="Center" Content="ChangeColor" Click="Button_Click" /> 
    </Grid> 
</Window> 

然後單擊處理程序改變了顏色,該按鈕:

private void Button_Click(object sender, RoutedEventArgs e) 
{ 
    ((SolidColorBrush)Resources["MyColor"]).Color = Colors.Purple; 
} 

和它的工作就像一個冠軍。

+0

感謝您 - 這不起作用,但是當資源是在資源字典中,這似乎是我的問題我將資源移動到Window.Resources像你的例子 - 這工作,但這必須是可用的類我的軟件 - 將編輯我的問題提到這 – RoguePlanetoid 2009-02-17 19:49:27

+0

我的解決方案是存儲資源的Window.Resources作爲這個例子顯示,而不是像你的例子那樣工作 - 但仍然希望保留Resources.xaml中的所有資源,但它的工作原理,這是重要的。 – RoguePlanetoid 2009-02-24 10:36:19

0

你可以發表你如何試圖改變資源字典中的顏色的例子嗎?

當我製作示例應用程序並嘗試更改資源值時,看起來資源字典中的SolidColorBrush已凍結,因此無法修改。爲了解決這個問題,我只是將新值設置爲新的SolidColorBrush。