2010-09-21 71 views
0

我創建了一個自定義的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的不同值時添加新樣式。

回答

0

不,我不認爲有辦法做到這一點,除非你從你的ToggleButtonEx派生出一個自定義的RadioButton來複制RadioButton中存在的所有功能。但是我懷疑這很有趣 - 甚至可能完全不可能。

但是,也許我們會對如何以另一種略有不同的方式解決您的問題提出一些建議;你可以嘗試勾勒出包含DependencyProperty的廣泛需求?也許甚至有一個內置的功能可以幫助你,但沒有人能想到提供它,因爲沒有人知道它可以幫助你。

+0

謝謝亞歷克斯。我已經按照我的要求更新了原始帖子。 – Flack 2010-09-21 16:18:59

+0

我確定我錯過了一些東西,但爲什麼不直接從RadioButton繼承? – 2010-09-21 18:23:13

+0

嗯。你是對的。我創建了一個RadioButtonEx,它擴展了RadioButton,然後創建了一個樣式來改變它的ControlTemplate。我不需要在任何地方引用ToggleButton。感謝Alex的幫助。 – Flack 2010-09-22 12:53:20