当我将<StackPanel>
的可见性更改为Collapsed时,我希望能够为其动画。我找到了这个Question,为此,我接受了答案。我创建了以下XAML代码:
<Grid x:Name="grdBRDS">
<Grid.Resources>
<Style TargetType="StackPanel" x:Key="XPND">
<Setter Property="RenderTransform">
<Setter.Value>
<ScaleTransform ScaleX="1"/>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="Tag" Value="Hide">
<Trigger.EnterActions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetProperty="RenderTransform.ScaleX"
From="1" To="0"
Duration="0:00:1"/>
</Storyboard>
</BeginStoryboard>
</Trigger.EnterActions>
</Trigger>
<Trigger Property="Tag" Value="Show">
<Trigger.EnterActions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetProperty="RenderTransform.ScaleX"
From="0" To="1"
Duration="0:00:1"/>
</Storyboard>
</BeginStoryboard>
</Trigger.EnterActions>
</Trigger>
</Style.Triggers>
</Style>
</Grid.Resources>
<StackPanel x:Name="pnlTRG" Orientation="Horizontal" Margin="7" Style="{StaticResource XPND}">
这些点击事件有两个按钮:
Private Sub btnCLPS_Click(sender As Object, e As RoutedEventArgs) Handles btnCLPS.Click
pnlTRG.Tag = "Hide"
btnCLPS.Visibility = 2 'This is just to have the buttons replace each other rather than create
btnEXPD.Visibility = 0 'logic for which action to invoke
End Sub
Private Sub btnEXPD_Click(sender As Object, e As RoutedEventArgs) Handles btnEXPD.Click
pnlTRG.Tag = "Show"
btnCLPS.Visibility = 0
btnEXPD.Visibility = 2
End Sub
一切正常。但是,在我折叠<StackPanel>
并对其进行扩展之后,即使扩展成功了,折叠也不再起作用(先缩放到0,然后再缩放到1)。我想念什么?
答案 0 :(得分:0)
我想出了一个解决方案。我创建了4种不同的样式:
按钮设置活动样式,触发过渡,然后使用计时器触发设置适当的静态样式。这是最终代码:
XAML:
<Grid x:Name="grdBRDS">
<Grid.Resources>
<Style TargetType="StackPanel" x:Key="HDN">
<Setter Property="RenderTransform">
<Setter.Value>
<ScaleTransform ScaleX="0"/>
</Setter.Value>
</Setter>
</Style>
<Style TargetType="StackPanel" x:Key="SHN">
<Setter Property="RenderTransform">
<Setter.Value>
<ScaleTransform ScaleX="1"/>
</Setter.Value>
</Setter>
</Style>
<Style TargetType="StackPanel" x:Key="CLPS">
<Setter Property="RenderTransform">
<Setter.Value>
<ScaleTransform ScaleX="1"/>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="Tag" Value="Hide">
<Trigger.EnterActions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetProperty="RenderTransform.ScaleX"
From="1" To="0"
Duration="0:00:1"/>
</Storyboard>
</BeginStoryboard>
</Trigger.EnterActions>
</Trigger>
</Style.Triggers>
</Style>
<Style TargetType="StackPanel" x:Key="XPND">
<Setter Property="RenderTransform">
<Setter.Value>
<ScaleTransform ScaleX="0"/>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="Tag" Value="Show">
<Trigger.EnterActions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetProperty="RenderTransform.ScaleX"
From="0" To="1"
Duration="0:00:1"/>
</Storyboard>
</BeginStoryboard>
</Trigger.EnterActions>
</Trigger>
</Style.Triggers>
</Style>
</Grid.Resources>
<StackPanel x:Name="pnlTRG" Orientation="Horizontal" Margin="7">
计时器和按钮的VB:
Private tmrXPD As New Threading.DispatcherTimer
Private Sub NewTmr()
InitializeComponent()
tmrXPD.Interval = TimeSpan.FromSeconds(1.1)
AddHandler tmrXPD.Tick, New EventHandler(AddressOf tmrXPD_Tick)
End Sub
Private Sub tmrXPD_Tick(sender As Object, e As RoutedEventArgs)
ExpansionState(Convert.ToString(sender, Tag))
End Sub
Private Sub ExpansionState(ByVal strSTATE As String)
Select Case strSTATE
Case "HDN"
pnlTRG.Style = DirectCast(grdBRDS.Resources("HDN"), Style)
pnlTRG.Tag = "Standby"
Case "SHN"
pnlTRG.Style = DirectCast(grdBRDS.Resources("SHN"), Style)
pnlTRG.Tag = "Standby"
End Select
End Sub
Private Sub btnCLPS_Click(sender As Object, e As RoutedEventArgs) Handles btnCLPS.Click
pnlTRG.Style = DirectCast(grdBRDS.Resources("CLPS"), Style)
btnCLPS.Tag = "HDN"
pnlTRG.Tag = "Hide"
tmrXPD.Start()
btnCLPS.Visibility = 2
btnEXPD.Visibility = 0
End Sub
Private Sub btnEXPD_Click(sender As Object, e As RoutedEventArgs) Handles btnEXPD.Click
pnlTRG.Style = DirectCast(grdBRDS.Resources("XPND"), Style)
btnCLPS.Tag = "SHN"
pnlTRG.Tag = "Show"
tmrXPD.Start()
btnCLPS.Visibility = 0
btnEXPD.Visibility = 2
End Sub