2011-09-15 71 views
1

我在Window.Resources上有幾種樣式,我應用於多個C#按鈕。然後我需要改變風格,但首先我需要知道什麼是應用於按鈕的當前風格,我想改變風格。 我找不到從按鈕中獲取樣式名稱的方法!獲取按鈕樣式名稱

+0

嘗試一個:http://stackoverflow.com/questions/538750/can-i-get-the-key-of-a-style-in-code-behind-wpf –

回答

0

這是一個很好的問題(+1)。

這只是我的想法,可能不是很準確。我懷疑爲UI控件獲取樣式是否合理。假設你將風格「style1」應用到UI控件,然後你可以設置單獨的屬性,如前景/背景....現在,什麼樣的風格?

如果您想維護/追蹤按鈕的狀態,那麼應該將其作爲視覺狀態或在您的代碼後面(ViewModel/Model)處理。

0

請參見:Style

public void FooFunc() 
{ 
    Button myButton = ...; 

    Console.WriteLine("The Style: {0}", myButton.Style); 
} 

我認爲這是你在找什麼?

1

你試過Button.Style房產嗎?如果使用資源Key完成樣式的explcit設置,那麼您應該使用Button.Style propetry獲取按鈕的當前樣式,否則在控制級別收集所有Style相關信息會有點棘手。

並且有這個原因。樣式是繼承的,可以在不同的元素範圍(如App,Window,UserControl,Ancestor UIElements以及最終的單個控件)上重寫。因此,當您訪問Button.Style屬性時,您會得到一種適用於Button的最後直接樣式。如果款式是BasedOn另一種Style那麼Style.BasedOn會給你父母/基地Style。再次,如果BasedOn風格是從另一個Style派生的,我們將得到如Style.basedOn.BasedOn ...等

我希望這是有道理的。 :-)

+0

button.style回報一種風格,而不是風格的名字! – Max

+0

爲什麼Style會帶有名字?如果可能,它應該攜帶一個密鑰。如果你想知道這個名字,那麼試試'Style.Name'屬性。但是樣式或其他資源通常帶有「Key」。這個「Key」可以是一個字符串名,也可以是一個Type對象,例如BasedOn =「{StaticResource {x:Type TextBox}}」就是這樣一種風格,它是Type TextBox,也就是應用於所有文本框的全局風格。 –

+0

是啊!你是真的! – Max

1

如果你用這種方式處理你的問題,我認爲你在設計/架構方面犯了錯誤。如果您需要有條件地更改樣式,則可以使用data-bindingtemplating基於包含相關信息的對象創建UI元素。

0

感謝您的回答,我從另一個stackoverflow使用此功能..它的作品,並返回樣式名稱爲一個字符串!

static public string FindNameFromResource(ResourceDictionary dictionary, object resourceItem) 

static public string FindNameFromResource(ResourceDictionary dictionary, object resourceItem) 
     { 
      foreach (object key in dictionary.Keys) 
      { 
       if (dictionary[key] == resourceItem) 
       { 
        return key.ToString(); 
       } 
      } 

      return null; 
     }