WPF XAML 网格可见性触发器

10

我在我的网格的第一行上有一个状态消息,并希望在可见性更改时将其滑入和滑出。
第一个可见性触发器很好用,可以快速打开第一行网格。但是,一旦我添加“折叠”触发器,就完全不起作用了。当可见性设置为折叠时,如何反转动画以关闭幻灯片?

<Grid Grid.Row="0" Height="55" Visibility="{Binding StatusMessageVisibility, Mode=TwoWay}">
    <Grid.Style>
        <Style TargetType="Grid">
            <Style.Triggers>
                <Trigger Property="Visibility" Value="Visible">
                    <Trigger.EnterActions>
                        <BeginStoryboard>
                            <Storyboard>
                                <DoubleAnimation Storyboard.TargetProperty="Height" From="0" To="55" Duration="0:0:.1" />
                            </Storyboard>
                        </BeginStoryboard>
                    </Trigger.EnterActions>
                </Trigger>
                <Trigger Property="Visibility" Value="Collapsed">
                    <Trigger.EnterActions>
                        <BeginStoryboard>
                            <Storyboard>
                                <DoubleAnimation Storyboard.TargetProperty="Height" From="55" To="0" Duration="0:0:.1" />
                            </Storyboard>
                        </BeginStoryboard>
                    </Trigger.EnterActions>
                </Trigger>                        
            </Style.Triggers>
        </Style>
    </Grid.Style>
    <TextBlock Text="Hi There" />
</Grid>
1个回答

13

您应该移除网格中的Visibility绑定,并使用一个绑定到StatusMessageVisibility属性的DataTrigger。如果绑定了网格的可见性,则一旦折叠,它就会保持折叠状态,您将无法看到动画。

此外,不要再使用两个具有EnterActions的数据触发器,而是使用一个单独的数据触发器,该触发器还具有用于折叠状态的ExitAction

<Grid Grid.Row="0" Height="55">
    <Grid.Style>
        <Style TargetType="Grid">
            <Style.Triggers>
                <DataTrigger Binding="{Binding StatusMessageVisibility}" Value="Visible">
                    <DataTrigger.EnterActions>
                        <BeginStoryboard>
                            <Storyboard>
                                <DoubleAnimation Storyboard.TargetProperty="Height" From="0" To="55" Duration="0:0:.1" />
                            </Storyboard>
                        </BeginStoryboard>
                    </DataTrigger.EnterActions>
                    <DataTrigger.ExitActions>
                        <BeginStoryboard>
                            <Storyboard>
                                <DoubleAnimation Storyboard.TargetProperty="Height" From="55" To="0" Duration="0:0:0.1" />
                            </Storyboard>
                        </BeginStoryboard>
                    </DataTrigger.ExitActions>
                </DataTrigger>               
            </Style.Triggers>
        </Style>
    </Grid.Style>
    <TextBlock Text="Hi There" />
</Grid>

在我的情况下,网格默认情况下必须折叠,但如果我从网格中删除绑定,则无论我如何初始化网格上的可见性,它都会始终可见或始终折叠,并且数据触发器永远不会触发。似乎数据触发器不能更新网格的可见性。我该怎么办? - Mauro Sampietro
似乎DataTrigger无法更新网格的可见性。 - Mauro Sampietro

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接