2013-03-12 17 views
3

我在代碼後面創建觸發器,我試圖將一個setter的值綁定到在後面的代碼中創建的動態資源,所以我可以隨時更新資源並且仍然有更新了setter的值。我儘可能綁定二進制值到DynamicResource

SolidColorBrush brush = Brushes.Red; 
Resources.Add("NewBrush",brush); 
Setter setter = new Setter(); 
setter.Property = Control.BackgroundProperty; 

但我不確定如何將setter的值綁定到創建的動態資源。我不能簡單地在XAML中創建資源,因爲資源需要動態創建。如何將Setter的值綁定到動態資源,以便更改資源將會改變setter的值。

多一點信息來澄清。這些都是在代碼後面完成的,因爲所有內容都是動態生成的觸發器,設置器,格式化,控件都是基於XML結構創建的。

+0

'我不能簡單地在XAML中創建資源,因爲資源需要動態創建' - 沒有理由不在XAML中定義'Setter'。 – 2013-03-12 15:42:12

+0

@HighCore我試圖澄清以上 – flamebaud 2013-03-12 15:48:49

+0

你可以發佈一個XML文件的例子嗎? – 2013-03-12 15:57:37

回答

3

使用ILSpy一些反編譯幫助解決這個問題:

public partial class MainWindow : Window 
    { 
     public MainWindow() 
     { 
      this.InitializeComponent(); 

      var style = new Style(typeof (Button)); 

      var brush = new SolidColorBrush(Colors.Blue); 

      Resources["TheColor"] = brush; 
      var dynamicResource = new DynamicResourceExtension("TheColor"); 

      var setter = new Setter() 
       { 
        Property = Control.BackgroundProperty, 
        Value = dynamicResource 
       }; 
      style.Setters.Add(setter); 

      button1.Style = style; 
     } 

     private void button1_Click(object sender, RoutedEventArgs e) 
     { 
      var brush = new SolidColorBrush(Colors.Red); 

      Resources["TheColor"] = brush; 
     } 
    } 

所以有趣的是,Setter.Value預計DynamicResourceExtension的值。我原本以爲由DynamicResourceExtension.ProvideValue()生成的表達式應該是setter值應該採用的。無論如何,這似乎工作。