C# 基于网格可见性的WPF动画

C# 基于网格可见性的WPF动画,c#,wpf,xaml,animation,C#,Wpf,Xaml,Animation,我有一个网格开始崩溃。当用户单击按钮时,代码隐藏将可见性设置为可见。然后按钮XAML触发器使网格在3秒内从0增长到1925 我试图弄清楚如何在XAML中编程触发器以查找网格的可见性。然后根据其状态使动画增长或收缩。因此,根据下面的代码,如果触发器确定可见性可见,我想使网格从1925变为0,如果网格在单击按钮时显示为折叠,则从0变为1925。希望远离代码,了解UI中发生了什么。这就是为什么稍后我将网格可见性绑定到属性 XAML的主要组件 <Grid Name="gridDisplay

我有一个网格开始崩溃。当用户单击按钮时,代码隐藏将可见性设置为可见。然后按钮XAML触发器使网格在3秒内从0增长到1925

我试图弄清楚如何在XAML中编程触发器以查找网格的可见性。然后根据其状态使动画增长或收缩。因此,根据下面的代码,如果触发器确定可见性可见,我想使网格从1925变为0,如果网格在单击按钮时显示为折叠,则从0变为1925。希望远离代码,了解UI中发生了什么。这就是为什么稍后我将网格可见性绑定到属性

XAML的主要组件

    <Grid Name="gridDisplay" Background="AliceBlue" Visibility="Collapsed">

    </Grid>



    <Button 
        Style="{StaticResource {x:Static ToolBar.ButtonStyleKey}}"
        Width="32" Height="32" FontSize="16" VerticalAlignment="Center" HorizontalAlignment="Right" Background="White" Click="Button_Click">
        &gt;

        <Button.Triggers>
            <EventTrigger RoutedEvent="Button.Click">
                <BeginStoryboard>
                    <Storyboard>
                        <DoubleAnimation 
                            Storyboard.TargetName="gridDisplay"
                            Storyboard.TargetProperty="Width"
                            From="0" To="1925" Duration="0:0:3" />
                    </Storyboard>
                </BeginStoryboard>
            </EventTrigger>
        </Button.Triggers>
    </Button>

按钮事件

        //TODO: Bind grid to visibility property
        if (gridDisplay.Visibility == System.Windows.Visibility.Collapsed)
        {
            gridDisplay.Visibility = System.Windows.Visibility.Visible;
            (sender as Button).Content = "<";
        }
        else
        {
            gridDisplay.Visibility = System.Windows.Visibility.Collapsed;
            (sender as Button).Content = ">";
        }
//TODO:将网格绑定到可见性属性
if(gridDisplay.Visibility==System.Windows.Visibility.Collapsed)
{
gridDisplay.Visibility=System.Windows.Visibility.Visible;
(发送者为按钮)。内容=”;
}

您可以制作这样的动画,而不用使用触发器

xaml:

  <Window.Resources>
        <Storyboard x:Key="open">
            <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(FrameworkElement.Width)" Storyboard.TargetName="gridDisplay">
                <EasingDoubleKeyFrame KeyTime="0" Value="0"/>
                <EasingDoubleKeyFrame KeyTime="0:0:0.6" Value="900"/>
            </DoubleAnimationUsingKeyFrames>
            <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="gridDisplay">
                <DiscreteObjectKeyFrame KeyTime="0" Value="{x:Static Visibility.Visible}"/>
            </ObjectAnimationUsingKeyFrames>
        </Storyboard>
        <Storyboard x:Key="close">
            <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(FrameworkElement.Width)" Storyboard.TargetName="gridDisplay">
                <EasingDoubleKeyFrame KeyTime="0" Value="900"/>
                <EasingDoubleKeyFrame KeyTime="0:0:0.6" Value="0"/>
            </DoubleAnimationUsingKeyFrames>
            <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="gridDisplay">
                <DiscreteObjectKeyFrame KeyTime="0:0:0.6" Value="{x:Static Visibility.Collapsed}"/>
            </ObjectAnimationUsingKeyFrames>
        </Storyboard>
    </Window.Resources>

您可以制作这样的动画,而不是使用触发器

xaml:

  <Window.Resources>
        <Storyboard x:Key="open">
            <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(FrameworkElement.Width)" Storyboard.TargetName="gridDisplay">
                <EasingDoubleKeyFrame KeyTime="0" Value="0"/>
                <EasingDoubleKeyFrame KeyTime="0:0:0.6" Value="900"/>
            </DoubleAnimationUsingKeyFrames>
            <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="gridDisplay">
                <DiscreteObjectKeyFrame KeyTime="0" Value="{x:Static Visibility.Visible}"/>
            </ObjectAnimationUsingKeyFrames>
        </Storyboard>
        <Storyboard x:Key="close">
            <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(FrameworkElement.Width)" Storyboard.TargetName="gridDisplay">
                <EasingDoubleKeyFrame KeyTime="0" Value="900"/>
                <EasingDoubleKeyFrame KeyTime="0:0:0.6" Value="0"/>
            </DoubleAnimationUsingKeyFrames>
            <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="gridDisplay">
                <DiscreteObjectKeyFrame KeyTime="0:0:0.6" Value="{x:Static Visibility.Collapsed}"/>
            </ObjectAnimationUsingKeyFrames>
        </Storyboard>
    </Window.Resources>

非常感谢。非常感谢,谢谢。非常感谢。
private bool _visibleProp;
public bool VisibleProp{get{return _visibleProp;} 
    set{_visibleProp = value; 
        if(value){var storyboard = this.Resources["open"] as Storyboard;
                storyboard.Begin(); }
        else{var storyboard = this.Resources["close"] as Storyboard;
                storyboard.Begin();}
          }}