我創建了一個自定義的ToggleButton類,ToggleButtonEx,它擴展了ToggleButton。 ToggleButtonEx包含我創建的一些依賴項屬性,以便在模板中使用它們。我想將所有單選按鈕的樣式基於新的切換按鈕樣式。以下是我有:基於自定義ToggleButton的Radiobutton樣式
的ToggeButtonEx風格,它定義模板:
<Style TargetType="{x:Type local:ToggleButtonEx}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:ToggleButtonEx}">
...
單選按鈕風格的基礎斷ToggleButtonEx風格:
<Style BasedOn="{StaticResource {x:Type local:ToggleButtonEx}}" TargetType="{x:Type RadioButton}">
這不工作,雖然。根據MSDN,
「如果你創建一個樣式與 TargetType的屬性和它的基礎上 另一個風格,也定義了 TargetType的屬性,目標類型派生的風格的 必須相同 爲或者可以從 基本風格中派生出來。「
由於單選按鈕切換按鈕從導出並沒有ToggleButtonEx,我無法應用該樣式的,我需要切換按鈕樣式是基於關閉ToggleButtonEx的,否則我不能在使用個性化的依賴屬性模板。有沒有辦法做到這一點?
UPDATE:
這裏是我的要求。也許有人可以提供替代解決方案。
我想顯示單選按鈕作爲切換按鈕,使它們看起來像切換按鈕,但保持單選按鈕互斥功能。這並不難。我創建了一個定位到ToggleButton的樣式來設置我想要的切換按鈕樣式,然後創建了一個基於切換按鈕樣式的定位於RadioButton的新樣式。
現在在我的ToggleButton樣式中,我更改ControlTemplate以使按鈕具有圓角。我決定我希望不同的按鈕有不同的CornerRadius,或者根本不需要四捨五入。我問怎麼能在這個崗位來完成:
Inheriting/overriding WPF styles
一個建議是創建一個自定義切換按鈕,添加一個新的屬性,以便它可以在一個TemplateBinding使用。我嘗試過,但看起來如果可能的話,我做得不對。我希望避免每次需要CornerRadius的不同值時添加新樣式。
謝謝亞歷克斯。我已經按照我的要求更新了原始帖子。 – Flack 2010-09-21 16:18:59
我確定我錯過了一些東西,但爲什麼不直接從RadioButton繼承? – 2010-09-21 18:23:13
嗯。你是對的。我創建了一個RadioButtonEx,它擴展了RadioButton,然後創建了一個樣式來改變它的ControlTemplate。我不需要在任何地方引用ToggleButton。感謝Alex的幫助。 – Flack 2010-09-22 12:53:20