2014-05-19 84 views
0

我試圖創建一個自定義控件,它繼承自Button。在ControlTemplate中,我想將MyCustomButton顯示爲Circle,Square或其他任何形狀。如何動態更改WPF中的ControlTemplate

我有一個DependencyProperty - ButtonShape - 這是枚舉類型,並且指示該按鈕的形狀的類型。當用戶更改ButtonShape時,必須更改該按鈕的外觀。

我知道如何爲我的自定義按鈕創建一個ControlTemplate,使它看起來像一個圓形或正方形或橢圓形或任何其他形狀,但我不知道如何處理變化的部分。

也許我應該創建其他CONTROLTEMPLATES並在OnButtenShapeChanged事件設置相應的模板,但我認爲這是不正確的方法。

任何想法,將不勝感激。謝謝。

回答

0

我重寫ControlTemplate屬性的元數據,並添加一個強制回調。然後,在Coerce階段,返回當前想要使用的ControlTemplate(根據您的屬性)。

在您ButtonShape屬性值改變的回調,你需要調用CoerceValue()更新控件模板。

這將禁用消費者自行設定控制模板的能力,但它聽起來可能不是這裏的問題。

這裏有依賴項屬性強制一些基本知識:http://msdn.microsoft.com/en-us/library/ms745795(v=vs.110).aspx#Coerce_Value_Callbacks_and_Property_Changed_Events

+0

對不起,你最終意味着什麼重寫ControlTemplate? – user3530012

+0

覆蓋依賴項屬性元數據,該元數據允許您添加否則不可用的回調。 http://msdn.microsoft.com/en-us/library/ms754209(v=vs.110).aspx –

1

我相信這樣做將是define triggers in your ControlTemplate最簡單的方法。 您需要在(單個)ControlTemplate中定義三個形狀,並根據ButtonShape屬性的狀態顯示/隱藏所需形狀。

+1

O/P的附加說明:如果使用Path([doc鏈接](http:// msdn .microsoft.com/en-us/library/system.windows.shapes.path.aspx)),您可以使用觸發器將其Path.Data屬性設置爲不同的幾何形狀,如圓形,方形和更復雜的幾何形狀。 .. – elgonzo

+0

@elgonzo好想法。這樣,他也避免了不必要的UI元素 –

+0

,這對我來說似乎是一個很好的方法,但如果有更多的形狀呢?我的意思是,如果我想有十幾個形狀的按鈕更改它的外觀基於它們,它仍然是一個好方法? – user3530012