2011-03-09 3 views
1

J'essaie de créer un style de bouton bascule Silverlight qui basculerait entre un signe plus et un signe moins. Malheureusement, il montre toujours un signe moins. Quelqu'un peut-il me dire quel est le problème avec ce style:Silverlight ToggleButton avec des images

<Style x:Key="PlusMinusToggleButtonStyle" TargetType="ToggleButton"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="ToggleButton"> 
       <Grid> 
        <VisualStateManager.VisualStateGroups> 
         <VisualStateGroup x:Name="CheckStates"> 
          <VisualState x:Name="Unchecked"> 
           <Storyboard> 
            <DoubleAnimation Storyboard.TargetName="UncheckedVisual" Storyboard.TargetProperty="Opacity" To="0" Duration="1" /> 
            <DoubleAnimation Storyboard.TargetName="CheckedVisual" Storyboard.TargetProperty="Opacity" To="1" Duration="0" /> 
           </Storyboard> 
          </VisualState> 
          <VisualState x:Name="Checked"> 
           <Storyboard> 
            <DoubleAnimation Storyboard.TargetName="UncheckedVisual" Storyboard.TargetProperty="Opacity" To="1" Duration="0" /> 
            <DoubleAnimation Storyboard.TargetName="CheckedVisual" Storyboard.TargetProperty="Opacity" To="0" Duration="1" /> 
           </Storyboard> 
          </VisualState> 
         </VisualStateGroup> 
        </VisualStateManager.VisualStateGroups> 
        <Grid> 
         <Image x:Name="UncheckedVisual" Source="plus.png" Stretch="None" /> 
         <Image x:Name="CheckedVisual" Source="minus.png" Stretch="None" /> 
        </Grid> 
       </Grid> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

Répondre

2

Vous devez développer l'DoubleAnimation, mis en animation d'images clés en elle. Réglez également l'opacité de base à 0, puis fondez dans l'opacité dont vous avez besoin. Par exemple:

<VisualState x:Name="Checked"> 
     <Storyboard> 
      <DoubleAnimationUsingKeyFrames Storyboard.TargetName="CheckedVisual" Storyboard.TargetProperty="Opacity"> 
       <EasingDoubleKeyFrame KeyTime="0" Value="0"/> 
       <EasingDoubleKeyFrame KeyTime="0:0:1" Value="1"/> 
      </DoubleAnimationUsingKeyFrames> 
     </Storyboard> 
    </VisualState> 

Chaque fois qu'un état est changé, il retourne à l'état de base alors à l'état qui a été appelé. Parce qu'un bouton bascule est toujours dans un état activé ou désactivé, il ne sera pas dans un état invisible.

+0

Merci Shawn - cela fonctionne parfaitement! – Naresh