2012-12-06 19 views
5

Das treibt mich batty. Ich habe eine einfache WPF Umschalttaste mit zwei Triggern für IsChecked. Eine für den Wert, der wahr ist, und der andere für den Wert, der falsch ist. Es funktioniert gut, wenn die Schaltfläche nicht aktiviert ist, wird mein Stil für falsch angewendet; Das System wendet jedoch den Stil nie an, wenn IsChecked den Wert true hat. Es verwendet immer nur den blauen Standard-Windows-Stil. Irgendwelche Ideen?WPF ToggleButton IsChecked Trigger

<ToggleButton Content="Control 1" Width="200" Margin="0,0,0,10" Focusable="False"> 
    <ToggleButton.Resources> 
     <Style TargetType="{x:Type ToggleButton}"> 
      <Style.Triggers> 
       <Trigger Property="IsChecked" Value="True"> 
        <Setter Property="Background"> 
         <Setter.Value> 
          <LinearGradientBrush EndPoint="0,1" StartPoint="0,0"> 
           <GradientStop Color="#FFF3F3F3" Offset="1"/> 
           <GradientStop Color="LawnGreen" Offset="0.307"/> 
          </LinearGradientBrush> 
         </Setter.Value> 
        </Setter> 
       </Trigger> 
       <Trigger Property="IsChecked" Value="False"> 
        <Setter Property="Background"> 
         <Setter.Value> 
          <LinearGradientBrush EndPoint="0,1" StartPoint="0,0"> 
           <GradientStop Color="#FFF3F3F3" Offset="1"/> 
           <GradientStop Color="Red" Offset="0.307"/> 
          </LinearGradientBrush> 
         </Setter.Value> 
        </Setter> 
       </Trigger> 
      </Style.Triggers> 
     </Style> 
    </ToggleButton.Resources> 
</ToggleButton> 

Jede Hilfe würde sehr geschätzt werden. Ich bin sicher, es ist etwas Offensichtliches, das ich nur übersehe.

+0

Ich habe versucht, Ihren Code zu einem leeren Grid hinzufügen und es funktioniert gut. Haben Sie globale Style-Ressourcen, die Ihre Kontrolle beeinflussen können? oder zu welchem ​​Container fügst du diesen Button hinzu? –

+1

Ich sicher nicht. Es war eine brandneue .dll, um meine Benutzersteuerelemente unterzubringen, und ich hatte noch keine Ressourcen erstellt. Das war so seltsam daran. Die Empfehlung unten funktioniert, aber ich würde gerne wissen, warum meine Version nicht. – Llaslo

Antwort

15

Das Layout, wenn die ToggleButton.IsChecked wechselt, scheint Teil der Vorlage zu sein. Wenn Sie die Vorlage überschreiben, sollten Sie die Werte korrekt einstellen können. Siehe Override ToggleButton Style

Beispiel:

<ToggleButton Content="Control 1" Focusable="False"> 
    <ToggleButton.Template> 
     <ControlTemplate TargetType="{x:Type ToggleButton}"> 
     <Border CornerRadius="3" Background="{TemplateBinding Background}"> 
      <ContentPresenter Margin="3" 
       HorizontalAlignment="Center" 
       VerticalAlignment="Center"/> 
     </Border> 
     <ControlTemplate.Triggers> 
      <Trigger Property="IsChecked" Value="True"> 
       <Setter Property="Background"> 
        <Setter.Value> 
        <LinearGradientBrush EndPoint="0,1" StartPoint="0,0"> 
         <GradientStop Color="#FFF3F3F3" Offset="1"/> 
         <GradientStop Color="LawnGreen" Offset="0.307"/> 
        </LinearGradientBrush> 
        </Setter.Value> 
       </Setter> 
      </Trigger> 
      <Trigger Property="IsChecked" Value="False"> 
       <Setter Property="Background"> 
        <Setter.Value> 
        <LinearGradientBrush EndPoint="0,1" StartPoint="0,0"> 
         <GradientStop Color="#FFF3F3F3" Offset="1"/> 
         <GradientStop Color="Red" Offset="0.307"/> 
        </LinearGradientBrush> 
        </Setter.Value> 
       </Setter> 
      </Trigger> 
      </ControlTemplate.Triggers> 
     </ControlTemplate> 
     </ToggleButton.Template> 
    </ToggleButton> 
+0

Danke, das hat den Trick gemacht. – Llaslo

3

Ich weiß, meine Antwort bringen nichts Neues, aber Vorlage vorgeschlagen von newb scheint mir sehr vereinfacht. Also stelle ich meine eigene Version von ControlTemplate zur Verfügung. Es könnte für jemanden nützlich sein.

<ToggleButton Width="100" Height="100"> 
    <ToggleButton.Template> 
     <ControlTemplate TargetType="{x:Type ToggleButton}"> 
      <Border BorderBrush="Orange" 
        BorderThickness="3" 
        CornerRadius="3" 
        Margin="1" 
        Name="Border" 
        Background="{TemplateBinding Background}"> 
       <Grid> 
        <Rectangle Name="FocusCue" 
          Visibility="Hidden" 
          Stroke="Black" 
          StrokeThickness="1" 
          StrokeDashArray="1 2" 
          SnapsToDevicePixels="True" ></Rectangle> 
        <ContentPresenter Margin="3" 
            HorizontalAlignment="Center" 
            VerticalAlignment="Center"/> 
       </Grid> 
      </Border> 
      <ControlTemplate.Triggers> 
       <Trigger Property="IsChecked" Value="True"> 
        <Setter TargetName="Border" Property="Background" Value="IndianRed" /> 
        <Setter TargetName="Border" Property="BorderBrush" Value="DarkKhaki" /> 
       </Trigger> 
       <Trigger Property="IsChecked" Value="False"> 
        <Setter TargetName="Border" Property="Background" Value="Red" /> 
        <Setter TargetName="Border" Property="BorderBrush" Value="Orange" /> 
       </Trigger> 
       <Trigger Property="IsKeyboardFocused" Value="True"> 
        <Setter TargetName="FocusCue" Property="Visibility" Value="Visible" /> 
       </Trigger> 
       <Trigger Property="IsMouseOver" Value="True"> 
        <Setter TargetName="Border" Property="Background" Value="DarkRed" /> 
       </Trigger> 
      </ControlTemplate.Triggers> 
     </ControlTemplate> 
    </ToggleButton.Template> 
</ToggleButton> 
Verwandte Themen