2013-03-15 217 views
1

我想定製我的ToggleButtons以便檢查時,他們說「是」綠色,而不是檢查時,在紅色的說「不」。切換按鈕樣式只能在最後的切換按鈕

我已經創建了下面的風格,坐在我的樣式資源字典。

<!-- ToggleButtons --> 
<Style x:Key="YesNoToggleStyle" TargetType="ToggleButton"> 
    <Style.Triggers> 
    <Trigger Property="IsChecked" Value="True"> 
     <Setter Property="Background" Value="SpringGreen" /> 
     <Setter Property="Content"> 
     <Setter.Value> 
      <TextBlock Text="Yes"/> 
     </Setter.Value> 
     </Setter> 
    </Trigger> 
    <Trigger Property="IsChecked" Value="False"> 
     <Setter Property="Background" Value="Crimson" /> 
     <Setter Property="Content"> 
     <Setter.Value> 
      <TextBlock Text="No"/> 
     </Setter.Value> 
     </Setter> 
    </Trigger> 
    </Style.Triggers> 
</Style> 

This works ... sort of。如果ToggleButton是這兩個值中的最後一個,則顯示正確。所有以前具有相同值的按鈕均爲空白。高度也在縮小,但我使用觸發器上方的「高度」設置器來固定它。爲了說明這一點,正在創建一個新的記錄時的模樣:

Startup toggle buttons和我點擊按鈕1,2,3和1後再次:edited toggle buttons

我本來從周圍引用的風格格:

<Grid> 
    ... 
    <Grid.Resources> 
     <Style BasedOn="{StaticResource YesNoToggleStyle}" TargetType="{x:Type ToggleButton}" /> 
    </Grid.Resources> 

但改變這種所以每次切換按鈕引用風格單獨(<ToggleButton Style="{StaticResource YesNoToggleStyle}" ... />)還沒有做出區別。

我看着Customizing the toggle state of a toggle button in wpfOverride ToggleButton Style其中效果是一樣的,但他們談論的是外部圖像,而我的問題都在wpf內。

我也看了看第二答案:i want to change backcolor of toggle button when toggle button ischecked and viceversa in WPF但)我只有隨VS2012混合+ SketchFlow的預覽,和b)我是用混合共小白並不能得到從Select the "Checked State"Reset the Background Color在答案指示(加上我會很驚訝,如果這項任務要求混合工具)。

誰能告訴我怎樣做才能得到多的ToggleButtons正確使用相同的風格?

回答

1

這對我的作品。某處在Dictionary1.xaml

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <Style x:Key="YesNoToggleStyle" TargetType="{x:Type ToggleButton}" BasedOn="{StaticResource {x:Static ToolBar.ToggleButtonStyleKey}}"> 
     <Style.Triggers> 
      <Trigger Property="IsChecked" Value="False"> 
       <Setter Property="Background" Value="Crimson" /> 
       <Setter Property="Content" Value="No"/> 
      </Trigger> 
      <Trigger Property="IsChecked" Value="True"> 
       <Setter Property="Background" Value="SpringGreen" /> 
       <Setter Property="Content" Value="Yes"/> 
      </Trigger> 
     </Style.Triggers> 
    </Style> 
</ResourceDictionary> 

注意,這種風格是基於ToolBar.ToggleButtonStyle

<Grid> 
    <Grid.Resources> 
     <ResourceDictionary Source="pack://application:,,,/Dictionary1.xaml"/> 
    </Grid.Resources> 

    <ItemsControl ItemContainerStyle="{StaticResource YesNoToggleStyle}"> 
     <ToggleButton /> 
     <ToggleButton /> 
     <ToggleButton /> 
    </ItemsControl> 
</Grid> 
+0

謝謝。這樣做的工作。幾個問題,如果我可以:是否有一個非工具欄解決方案(我喜歡按鈕效果與standrd ToggleButton)?另外,爲什麼我的嘗試不工作〜我做錯了什麼? – mcalex 2013-03-15 07:03:42

+0

@mcalex:你的代碼看起來不錯。在我看來,問題在於'ToggleButton'的控制模板。我會研究這個模板,以及在ToolBar中定義的樣式來比較它們。請注意,如果切換按鈕將直接放置在網格中,而不是項目控件,則不會應用該樣式 - 這無疑是查看控件模板的原因。 – Dennis 2013-03-15 07:15:00

1

嘗試更換內容屬性的ContentTemplate:

<Setter Property="ContentTemplate"> 
     <Setter.Value> 
      <DataTemplate> 
       <TextBlock Text="Yes"/> 
      </DataTemplate> 
     </Setter.Value> 
    </Setter> 
0

在我來說,我希望有一個「鎖定」切換按鈕定義和在我的應用程序重複使用一個共同的DLL。 這是我的結果,爲我工作。也許有人覺得它有用(把這個在Resourcedictionary.xaml):

<BitmapImage x:Key="LockedLock" 
       UriSource="/...;component/Resources/Lock_closed_16p.png" /> 
<BitmapImage x:Key="OpenLock" 
       UriSource="/...;component/Resources/Lock_open_16p.png" /> 

<Style x:Key="LockButton" 
     TargetType="ToggleButton"> 
    <Setter Property="ContentTemplate"> 
     <Setter.Value> 
      <DataTemplate> 
       <Image Source="{DynamicResource OpenLock }" 
         Width="12" 
         Height="12" 
         Name="contentimage" /> 
       <DataTemplate.Triggers> 
        <DataTrigger Binding="{Binding RelativeSource={RelativeSource AncestorType=ToggleButton , AncestorLevel=1, Mode=FindAncestor }, Path=IsChecked}" 
           Value="True"> 
         <Setter Property="Image.Source" 
           TargetName="contentimage" 
           Value="{DynamicResource LockedLock }" /> 
        </DataTrigger> 
       </DataTemplate.Triggers> 
      </DataTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

貸:

Setting Button's Content to <Image> via Styles

Setter Target Name not recognized