gpt4 book ai didi

C# UWP XAML 动画

转载 作者:太空狗 更新时间:2023-10-29 23:30:12 24 4
gpt4 key购买 nike

我有一个带有包含两列的网格的页面,第一列包含一个切换第二列可见性的按钮(通过 ViewModel 绑定(bind))。如何为这种情况添加显示/隐藏第二列(以 Pivot 作为内容)的动画?

<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>

<Grid Grid.Column="0">
<Button Command="{Binding TogglePivot}"/>
</Grid>

<Pivot x:Name="Content_Pivot" Grid.Column="1">
<VisualStateManager.VisualStateGroups>
<VisualStateGroup>
<!-- Hidden state -->
<VisualState x:Name="Hidden">
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="Content_Pivot" Storyboard.TargetProperty="Width">
<DiscreteObjectKeyFrame KeyTime="0" Value="0"/>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</VisualState>

<!-- Visible state -->
<VisualState x:Name="Visible">
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="Content_Pivot" Storyboard.TargetProperty="Width">
<DiscreteObjectKeyFrame KeyTime="0" Value="600"/>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>

<interactivity:Interaction.Behaviors>
<!-- Show -->
<core:DataTriggerBehavior Binding="{Binding IsVisible}" ComparisonCondition="Equal" Value="True">
<core:GoToStateAction StateName="Visible"/>
</core:DataTriggerBehavior>

<!-- Hide -->
<core:DataTriggerBehavior Binding="{Binding IsVisible}" ComparisonCondition="Equal" Value="False">
<core:GoToStateAction StateName="Hidden" />
</core:DataTriggerBehavior>
</interactivity:Interaction.Behaviors>

<!-- Content.. -->
</Pivot>
</Grid>

以上工作正常,但仅在枢轴可见性的第一次切换时。随后的切换不显示动画..

有没有无需手动调用 Storyboard 即可实现此目的的简单方法?

谢谢。

==编辑==

我对上面的代码做了一些修改(即添加了 VisualStatesDataTriggerBehaviour)。

仍然无法让它工作...有什么想法吗?

最佳答案

在类似的场景中,我所做的不是切换枢轴的可见性,而是切换网格列(或枢轴)的宽度。毕竟零宽度的枢轴是不可见的。另外,根据我在您的代码中看到的内容,第二列的大小设置为 300,因此动画的目标宽度不会成为问题。

我的建议是在 xaml 中针对枢轴的宽度创建两个 Storyboard。第一个会扩展它,第二个会折叠它。然后使用绑定(bind)到 TogglePivot 的 DataTriggerBehavior 来触发 Storyboard。这样 xaml 仍然干净,不需要代码。

如果您尝试过但无法正确完成,我可以提供一些示例代码。

编辑:你的想法有点不对。这对我有用。

xmlns:media="using:Microsoft.Xaml.Interactions.Media"
<Page.Resources>

<Storyboard x:Name="PaneStoryboard">
<DoubleAnimation Duration="0:0:1" To="300" Storyboard.TargetProperty="(FrameworkElement.Width)" Storyboard.TargetName="Content_Pivot" EnableDependentAnimation="True"/>
</Storyboard>

<Storyboard x:Name="CloseStoryboard">
<DoubleAnimation Duration="0:0:1" To="0" Storyboard.TargetProperty="(FrameworkElement.Width)" Storyboard.TargetName="Content_Pivot" EnableDependentAnimation="True"/>
</Storyboard>

</Page.Resources>

<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>

<Grid Grid.Column="0">
<Button Content="Opend and Close" Command="{Binding TogglePivot}" />
</Grid>

<Pivot x:Name="Content_Pivot" Grid.Column="1" Width="300" Background="Blue">

<interactivity:Interaction.Behaviors>

<!--Show-->

<core:DataTriggerBehavior Binding="{Binding IsVisible}" ComparisonCondition="Equal" Value="True">
<media:ControlStoryboardAction Storyboard="{StaticResource PaneStoryboard}"/>
</core:DataTriggerBehavior>


<!--Hide-->

<core:DataTriggerBehavior Binding="{Binding IsVisible}" ComparisonCondition="Equal" Value="False">
<media:ControlStoryboardAction Storyboard="{StaticResource CloseStoryboard}"/>
</core:DataTriggerBehavior>
</interactivity:Interaction.Behaviors>

<!-- Content.. -->
</Pivot>
</Grid>

关于C# UWP XAML 动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32386741/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com