WPF中Dependency屬性設定順序的心得

iDotNetSpace發表於2009-02-11

今天在學習WPF依賴屬性的時候做了一個很經典的例子,即通過XMAL中的Trigger來改變按鈕的前景色。具體程式碼如下:

 

 

Code

 

 

可以很好的實現,將滑鼠移至按鈕上,然後按鈕的前景色變為藍色的功能。

但是嘗試給此按鈕設定一個Foreground屬性,程式碼:

 

Code
 

則使Trigger設定前者色的作用失效了。於是這便使我聯想到這幾天看到的一篇Dependency屬性計算順序的文章

http://www.cnblogs.com/YilingLai/archive/2006/12/25/602889.html

原來在第一步計算基礎值的時,系統是按照下面的優先順序來計算Dependency屬性的值的:

 

 

 1、Local Value                 

2、Style. Triggers             

3、Template Triggers                  

4、Style. Setters

5、Theme Style. Triggers   

6、Theme Style. Setters    

7、Property Value Inheritance     

8、Default Value

因為Foreground="Black"屬於Local Value,比Style. Triggers的優先順序要高,所以在計算過程中

它掩蓋了Style. Triggers對Foreground屬性值的作用。

那麼既需要設定Foreground同時也需要通過設定Trigger來改變它怎麼做呢?

答案就是如下面程式碼所示:

 

 

Code

       
           
               
                   
               

           

           
       
   

   
       
   
 

將Style提取到Window.Resources中,然後使此Button引用此資源。

因為在計算基礎值的順序時,Style. Triggers排在第二,而Style. Setter則排在第四的位置上。

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-548718/,如需轉載,請註明出處,否則將追究法律責任。

相關文章