2010-09-17 122 views
6

我想將多個切換按鈕組合在一起,並讓它們表現爲單選按鈕。所以我所做的就是添加單選按鈕,我的XAML和創建以下樣式:將按鈕切換爲單選按鈕樣式

<Style BasedOn="{StaticResource {x:Type ToggleButton}}" TargetType="RadioButton"> 
    <Setter Property="FontFamily" Value="Arial"/> 
    <Setter Property="FontSize" Value="12"/> 
    <Setter Property="Foreground" Value="White"/> 
    <Style.Triggers> 
    <Trigger Property="IsChecked" Value="True"> 
     <Setter Property="Background" Value="Red"/> 
    </Trigger> 
    </Style.Triggers> 
</Style> 

現在單選按鈕看起來像切換按鈕和風格的字體和前景性應用,但如果我點擊其中一個切換按鈕,背景不會變爲紅色。如果我基於IsChecked更改前景,它將起作用,但IsChecked爲true時無法更改背景。

任何想法?

UPDATE:

似乎默認的切換按鈕的風格不使用背景屬性。我正在使用下面的代碼來解決我的問題。如果有人看到下面有什麼問題,請告訴我。

<DataTemplate x:Key="RedBackground"> 
     <Grid Background="Red"> 
     <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" TextAlignment="Center" Text="{Binding}"/> 
     </Grid> 
    </DataTemplate> 

    <Style TargetType="ToggleButton"> 
     <Style.Triggers> 
     <Trigger Property="IsChecked" Value="True"> 
      <Setter Property="HorizontalContentAlignment" Value="Stretch"/> 
      <Setter Property="VerticalContentAlignment" Value="Stretch"/> 
      <Setter Property="ContentTemplate" Value="{StaticResource RedBackground}"/> 
     </Trigger> 
     </Style.Triggers> 
    </Style> 
+0

如果你在'RadioButton'上明確地將'Background'設置爲'Red',它是否真的有效? – 2010-09-17 15:37:35

+0

是的。在單選按鈕上設置Background =「Red」會顯示一個帶紅色背景的切換按鈕。 – Flack 2010-09-17 15:53:09

回答

4

請問風格你是立足於使用Background酒店在所有除非它被設置爲「用戶」?也就是說,你可以使用切換按鈕的樣式到這一點,並明確地將背景設置爲紅色以獲得所需的效果?

樣式中的觸發器看起來很好,但某些樣式忽略了主題呈現等屬性,因此在觸發器中設置這些屬性什麼都不做。

另一個可能的原因是dependency property value precedence的概念 - 當值設置爲「本地」時,該值將覆蓋樣式中給出的值(即使通過觸發器設置)。所以如果您的<RadioButton>標籤有背景設置,觸發器將不會執行任何操作。

+0

嗨菲利普。我做了一些更多的搜索,看起來你是正確的。我基於的樣式不使用Background屬性。我用我找到的解決方案更新了我的問題。謝謝您的幫助。 – Flack 2010-09-17 16:31:34