2010-10-15 100 views
0

我使用.NET 4,VS2010和已经创建了需要开始折叠和透明(不透明性0)和成为可见的和不透明的,响应于用户控制按钮点击。的VisualState启动折叠interfers与WPF .NET其他动画4

<UserControl x:Class="Ihi.LeadRetrieval.Client.Views.HelpView" 
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
        xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity" 
        xmlns:ei="http://schemas.microsoft.com/expression/2010/interactions" 
        mc:Ignorable="d" 
        d:DesignHeight="300" d:DesignWidth="300"> 
<Grid x:Name="HelpGrid" Visibility="Collapsed" Opacity="0"> 
    <VisualStateManager.VisualStateGroups> 
     <VisualStateGroup x:Name="HelpStateGroup"> 
      <VisualStateGroup.Transitions> 
       <VisualTransition GeneratedDuration="0:0:0.5"> 
        <VisualTransition.GeneratedEasingFunction> 
         <CircleEase EasingMode="EaseInOut"/> 
        </VisualTransition.GeneratedEasingFunction> 
       </VisualTransition> 
      </VisualStateGroup.Transitions> 
      <VisualState x:Name="HelpOpen"> 
      <Storyboard> 
       <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Opacity)" Storyboard.TargetName="HelpGrid"> 
        <EasingDoubleKeyFrame KeyTime="0" Value="0.95"/> 
       </DoubleAnimationUsingKeyFrames> 
       <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="HelpGrid"> 
        <DiscreteObjectKeyFrame KeyTime="0" Value="{x:Static Visibility.Visible}"/> 
       </ObjectAnimationUsingKeyFrames> 
      </Storyboard> 
      </VisualState> 
      <VisualState x:Name="HelpClosed"> 
      </VisualState> 
     </VisualStateGroup> 
    </VisualStateManager.VisualStateGroups> 
    <Border Background="#00427A" CornerRadius="3"> 
     <DockPanel Margin="5"> 
      <ContentPresenter DockPanel.Dock="Bottom" Margin="12,10,0,0" Content="{Binding Path=Detail}" Style="{StaticResource HelpText}"/> 
      <Label Style="{StaticResource HelpHeaderText}" Content="{Binding Path=Header}" DockPanel.Dock="Left" MaxHeight="50"/> 
      <Button x:Name="CloseHelpButton" Style="{StaticResource HelpButtonStyle}" Content="X" HorizontalAlignment="Right" VerticalAlignment="Top" DockPanel.Dock="Right" MaxHeight="50"> 
       <i:Interaction.Triggers> 
        <i:EventTrigger EventName="Click"> 
         <ei:GoToStateAction x:Name="CloseAction" StateName="HelpClosed"/> 
        </i:EventTrigger> 
       </i:Interaction.Triggers> 
      </Button> 
     </DockPanel> 
    </Border> 
</Grid> 

然而,当我的目标从父用户控件这种控制并触发HelpOpen视觉状态,我注意到,帮助控制出现在动画完成后abruptely - 它不褪色作为预期。

<view:HelpView x:Name="helpView" /> 
<Button x:Name="ButtonOpen" Margin="0,0,25,0" VerticalAlignment="Top" Content="Open"> 
    <i:Interaction.Triggers> 
     <i:EventTrigger EventName="Click"> 
      <ei:GoToStateAction TargetObject="{Binding ElementName=helpView}" StateName="HelpOpen"/> 
     </i:EventTrigger> 
    </i:Interaction.Triggers> 
</Button> 

我相信这是因为帮助控制只在动画的结尾变得可见,从而增加透明度的过渡不会被渲染。

是否有指定调整不透明度值之前的可见性属性被设置为可见的方法吗?

回答

0

我不知道,如果你找到了答案,你的问题,但它可能有助于知道一个过渡和视觉状态是两个不同的时间表。

这是最简单的编辑您在混合过渡和状态。事件的顺序是这样的:

  1. 开始在状态A
  2. 一些触发造成“转到状态” B
  3. 的从状态A到B的戏剧(0.5秒)的过渡。有你的过渡
  4. 应用状态B没有改变透明度或能见度/播放。这里就是你的不透明度和能见度的变化是,由于状态B具有0秒的持续时间,他们立即

发生什么,我通常做的是明确创建混合的转换(无论是- > stateB,stateA- >,或stateA-> stateB等)。然后,您可以调整何时应用可见性更改,以及不透明度更改何时开始/结束。