WPF加载动画时导致闪烁的数据触发器

问题描述:

我有一个数据触发器,它在设置为false时用动画隐藏相关控件。现在,当屏幕被加载时,属性的值已经是假的,仍然运行动画并淡化控件,从而隐藏它们。WPF加载动画时导致闪烁的数据触发器

它在屏幕上引起短暂的闪光。

我希望这些控件在屏幕上保持隐藏状态,直到将属性设置为true。

<Window.Resources> 
    <Style x:Key="somestyle" TargetType="Button"> 
     <Style.Triggers> 
      <DataTrigger Binding="{Binding IsControlVisible,UpdateSourceTrigger=PropertyChanged}" Value="False"> 
       <DataTrigger.EnterActions> 
        <BeginStoryboard> 
         <Storyboard> 
          <DoubleAnimation Duration="0:0:1.5" Storyboard.TargetProperty="Opacity" To="0" /> 
         </Storyboard> 
        </BeginStoryboard> 
       </DataTrigger.EnterActions> 
       <DataTrigger.ExitActions> 
        <BeginStoryboard> 
         <Storyboard> 
          <DoubleAnimation Duration="0:0:1.5" Storyboard.TargetProperty="Opacity" To="1" /> 
         </Storyboard> 
        </BeginStoryboard> 
       </DataTrigger.ExitActions> 
      </DataTrigger> 
     </Style.Triggers> 
    </Style> 
</Window.Resources> 
<StackPanel VerticalAlignment="Center"> 
    <Button Width="100" Height="50" Content="Toggle Visibiity" Click="Button_Click"/> 
    <Button Width="200" Height="50" Content="Something Something" Margin="0 20 0 0" Style="{StaticResource somestyle}"/> 
</StackPanel> 
+1

在load方法中,使加载开始时的StackPanel visible = false。然后在加载面板中的最后一条指令使StackPanel可见= true。 – jdweng

+0

@jdweng load方法中没有指令,所以只有两个语句是StackPanelVisible = false和StackPanelVisible = true – MegaMind

+0

你说:“正在加载屏幕”。所以我想你的意思是构造?发生Initialize(),然后发生默认的Load()方法。所以你需要用三条指令来添加一个Load方法(不仅仅是你发布的两条指令)。第三条指令是调用visible = false和visible = true之间的base.Load()方法; – jdweng

的问题是,当你的控制被装载并且应用样式,触发器被评估,并且由于最初IsControlVisiblefalse,第一故事板被启动时,动画的Opacity从1(默认值),以0.因此,解决方法是将初始值Opacity的值设置为0(或更好的是,将其初始值设为IsControlVisible)。要做到这一点就足够了适当制定者添加到您的风格:

<Style x:Key="somestyle" TargetType="Button"> 
    <Setter Property="Opacity" Value="{Binding IsControlVisible, Mode=OneTime}" /> 
    (...) 
</Style> 

这是最好的结合模式为OneTime,这样当IsControlVisible变化后的值时,Opacity仅由控制动画而不是绑定。此外,我没有使用任何转换器,但事实证明,框架足够智能,可以将bool正确转换为double

+0

你这一次都在哪里:-)。感谢它的魅力 – MegaMind

+0

@惊人的知识! – Ramankingdom