WPF动画触发器与属性值无关

本文关键字:属性 动画 触发器 WPF | 更新日期: 2023-09-27 18:29:26

我正试图为WPF表单中的内联警报框制作一个平滑的淡入/淡出动画。问题是,即使属性没有设置为触发器中预期的值,动画似乎也会运行。我在converter方法中设置了一个断点,它从不返回除Visibility之外的任何内容。Hidden,但Visibility上的触发器。Visible正在触发Height属性的动画(可能也会触发也可能不会触发不透明度上的动画,但我不知道,因为Grid是Visibility。Hidded)。

这是样式:

<Style TargetType="Grid" x:Key="AlertStyle">
    <Setter Property="Visibility" Value="Collapsed"/>
    <Style.Triggers>
        <Trigger Property="Visibility" Value="Visible">
            <Trigger.EnterActions>
                <BeginStoryboard>
                    <Storyboard>
                        <DoubleAnimation Storyboard.TargetProperty="Opacity"
                                         Duration="00:00:02" 
                                         BeginTime="00:00:00" 
                                         To="1.0" />
                        <DoubleAnimation Storyboard.TargetProperty="Height"
                                         Duration="00:00:01" 
                                         BeginTime="00:00:00" 
                                         To="60.0"/>
                    </Storyboard>
                </BeginStoryboard>
            </Trigger.EnterActions>
        </Trigger>
    </Style.Triggers>
</Style>

有问题的网格在这里:

<Grid DockPanel.Dock="Top" 
      Visibility="{Binding Path=Message, Converter={StaticResource NullToVis}}" 
      Style="{StaticResource AlertStyle}">
    <ContentPresenter Content="{Binding Path=Message, Mode=OneWay}"/>
</Grid>

价值转换器:

public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
    return (value == null) ? Visibility.Hidden : Visibility.Visible;
}

当我向<样式触发器>元素,两个动画都不会运行。

第二个触发器:

        <Trigger Property="Visibility" Value="Hidden">
            <Trigger.EnterActions>
                <BeginStoryboard>
                    <Storyboard>
                        <DoubleAnimation Storyboard.TargetProperty="Opacity"
                                         Duration="00:00:01" 
                                         BeginTime="00:00:00" 
                                         To="0.0" />
                        <DoubleAnimation Storyboard.TargetProperty="Height"
                                         Duration="00:00:02" 
                                         BeginTime="00:00:00" 
                                         To="0.0"/>
                    </Storyboard>
                </BeginStoryboard>
            </Trigger.EnterActions>
        </Trigger>

我以前从未尝试过在WPF中做任何与动画相关的事情,我在互联网上发现了类似的风格,但都没能成功地修改任何风格,让它们完成我想要完成的任务。

WPF动画触发器与属性值无关

试试这个:

<Style TargetType="Grid" x:Key="AlertStyle">
    <Setter Property="Visibility" Value="Collapsed"/>
    <Style.Triggers>
        <Trigger Property="Visibility" Value="Visible">
            <Trigger.EnterActions>
                <BeginStoryboard Name="Storyboard">
                    <Storyboard BeginTime="00:00:00">
                        <DoubleAnimation Storyboard.TargetProperty="Opacity" 
Duration="00:00:02" To="1.0" />
                        <DoubleAnimation Storyboard.TargetProperty="Height" 
Duration="00:00:01" To="60.0"/>
                    </Storyboard>
                </BeginStoryboard>
            </Trigger.EnterActions>
            <Trigger.ExitActions>
                <StopStoryboard BeginStoryboardName="Storyboard" />
            </Trigger.ExitActions>
        </Trigger>
    </Style.Triggers>
</Style>

如果这不起作用,那么您可以尝试使用具有自定义Boolean值的DataTrigger。。。这不会错得太离谱。