2011-08-16 1 views
2

C'est mon code:Comment utiliser un déclencheur sur ToggleButton.IsChecked ou IsPressed correctement?

<Window x:Class="WpfTests.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="MainWindow" Height="350" Width="525"> 
<Window.Resources> 
    <Thickness x:Key="tasksMargin">0,10,0,0</Thickness> 

</Window.Resources> 
<Grid> 
    <DockPanel HorizontalAlignment="Left"> 
     <!--<Border Padding="15">--> 
     <GroupBox> 
      <GroupBox.Header> 
       Database Tasks 
      </GroupBox.Header> 
      <StackPanel Width="Auto" > 
       <StackPanel.Resources> 
        <Style TargetType="RadioButton"> 
         <Setter Property="Template"> 
          <Setter.Value> 
           <ControlTemplate TargetType="RadioButton"> 
            <ToggleButton IsChecked="{Binding IsChecked, RelativeSource={RelativeSource TemplatedParent}, Mode=TwoWay}" 
         Content="{Binding Content, RelativeSource={RelativeSource TemplatedParent}, Mode=TwoWay}" 
            BorderThickness="2" BorderBrush="Yellow" Background="White"/> 
            <ControlTemplate.Triggers> 
             <Trigger Property="ToggleButton.IsChecked" Value="True"> 
               <Setter Property="Content" Value="different txt" /> 
              </Trigger> 
             <Trigger Property="ToggleButton.IsPressed" Value="True"> 
               <Setter Property="Content" Value="different text" /> 
              </Trigger> 
            </ControlTemplate.Triggers> 
           </ControlTemplate> 
          </Setter.Value> 
         </Setter> 
         <Setter Property="Margin" Value="5"> 
         </Setter> 
        </Style> 
       </StackPanel.Resources> 

       <RadioButton GroupName="Group1" x:Name="button1">Option1</RadioButton> 
       <RadioButton GroupName="Group1" x:Uid="button2" x:Name="button2">button2</RadioButton> 
       <RadioButton GroupName="Group1" x:Uid="button3" x:Name="button3">button3</RadioButton> 
      </StackPanel> 
     </GroupBox> 
    </DockPanel> 
</Grid> 

Cependant, le isChecked et IsPressed déclencheurs ne sont pas déclenchés. comment les déclarer correctement?

+1

Si je vous, je Prenez une copie du code qui fonctionne sur le Web et prenez-le à partir de là. Voir par exemple: http://anders.janmyr.com/2007/09/combining-datatriggers-and-property.html – ColinE

+0

pourquoi exactement un point négatif? – Greg

+0

et la réponse qui a réellement fonctionné pour moi vient d'être supprimée. deux downvotes maintenant: D – Greg

Répondre

4

Si vous donnez un nom à votre ToggleButton puis que vous le référencez dans les déclencheurs, cela devrait fonctionner. Ainsi, votre ControlTemplate ressemblerait à quelque chose comme ...

<ControlTemplate TargetType="RadioButton"> 
    <ToggleButton Name="toggleButton" IsChecked="{Binding IsChecked, RelativeSource={RelativeSource TemplatedParent}, Mode=TwoWay}" 
        Content="{Binding Content, RelativeSource={RelativeSource TemplatedParent}, Mode=TwoWay}" 
           BorderThickness="2" BorderBrush="Yellow" Background="White"/> 
    <ControlTemplate.Triggers> 
     <Trigger Property="ToggleButton.IsChecked" Value="True"> 
      <Setter TargetName="toggleButton" Property="Content" Value="different txt" /> 
     </Trigger> 
     <Trigger Property="ToggleButton.IsPressed" Value="True"> 
      <Setter TargetName="toggleButton" Property="Content" Value="different text" /> 
     </Trigger> 
    </ControlTemplate.Triggers> 
</ControlTemplate> 
+0

cela a fonctionné pour moi, merci. – Greg

1

Les types préfixés dans les déclencheurs ne sont pas nécessaires, modifiez également les liaisons sur le bouton bascule à TemplateBindings.

+0

connaissait la première partie, la deuxième partie ne fonctionne pas pour moi. – Greg

0

-il d'autres solutions available, mais pour ce problème. Effectuez les opérations suivantes:

1) Donnez votre Basculer Nom

<ToggleButton Name="tglBtn" IsChecked="{Binding IsChecked, RelativeSource={RelativeSource TemplatedParent}, Mode=TwoWay}" 
       Content="{Binding Content, RelativeSource={RelativeSource TemplatedParent}, Mode=TwoWay}" 
       BorderThickness="2" BorderBrush="Yellow" Background="White"/> 

2) En référence de déclenchement par le nom donné

<Trigger SourceName="tglBtn" Property="IsChecked" Value="True"> 
     <Setter TargetName="tglBtn" Property="Content" Value="different txt" /> 
</Trigger> 

espoir qui aide

Questions connexes