You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WPF C#中ComboBox切换时StackPanel动画异常的解决问询

WPF StackPanel 滑入滑出动画绑定ComboBox选中项问题

在WPF C#中为StackPanel和ComboBox创建了滑入、滑出动画资源及样式,通过ComboBox的SelectedPanel绑定值控制对应StackPanel的显示。最初实现时,面板滑入后会自动消失;修改配置后面板可停留,但动画效果丢失。现需实现:切换ComboBox选中项时,对应StackPanel正常滑入并停留,切换其他选项时滑出,且每次选中目标项都能触发动画。


原始代码

动画资源字典

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

    <Storyboard x:Key="SlideInStoryboard" FillBehavior="Stop">
        <DoubleAnimation Storyboard.TargetProperty="(UIElement.RenderTransform).(TranslateTransform.X)"
                         From="100" To="0" Duration="0:0:5">
            <DoubleAnimation.EasingFunction>
                <QuadraticEase EasingMode="EaseOut"/>
            </DoubleAnimation.EasingFunction>
        </DoubleAnimation>

        <DoubleAnimation Storyboard.TargetProperty="Opacity"
                         From="0" To="1" Duration="0:0:5">
            <DoubleAnimation.EasingFunction>
                <QuadraticEase EasingMode="EaseOut"/>
            </DoubleAnimation.EasingFunction>
        </DoubleAnimation>
    </Storyboard>

    <Storyboard x:Key="SlideOutStoryboard" FillBehavior="Stop">
        <DoubleAnimation Storyboard.TargetProperty="(UIElement.RenderTransform).(TranslateTransform.X)"
                         From="0" To="100" Duration="0:0:5">
            <DoubleAnimation.EasingFunction>
                <QuadraticEase EasingMode="EaseIn"/>
            </DoubleAnimation.EasingFunction>
        </DoubleAnimation>
        <DoubleAnimation Storyboard.TargetProperty="Opacity"
                         From="1" To="0" Duration="0:0:5">
            <DoubleAnimation.EasingFunction>
                <QuadraticEase EasingMode="EaseIn"/>
            </DoubleAnimation.EasingFunction>
        </DoubleAnimation>
    </Storyboard>

    <Style x:Key="AnimatedPanelStyle" TargetType="StackPanel">
        <Setter Property="RenderTransform">
            <Setter.Value>
                <TranslateTransform X="0"/>
            </Setter.Value>
        </Setter>
        <Setter Property="Opacity" Value="0"/>
        <Style.Triggers>
            <EventTrigger RoutedEvent="StackPanel.Loaded">
                <BeginStoryboard Storyboard="{StaticResource SlideInStoryboard}"/>
            </EventTrigger>
        </Style.Triggers>
    </Style>
</ResourceDictionary>

ComboBox 代码

<ComboBox x:Name="SelectionSelector" Grid.Column="1" 
 HorizontalAlignment="Stretch" 
 VerticalAlignment="Center"
 Width="Auto" Height="25" 
 Background="White" 
 Margin="93,0,5,0" ItemsSource="{Binding ConfigOptions}"
 DisplayMemberPath="Name" SelectedValuePath="Tag"
 SelectedValue="{Binding SelectedPanel}"/>

StackPanel 代码

<StackPanel Grid.Row="1">
    <StackPanel.Style>
        <Style TargetType="StackPanel" BasedOn="{StaticResource AnimatedPanelStyle}">
            <Setter Property="Visibility" Value="Collapsed"/>
            <Style.Triggers>
                <DataTrigger Binding="{Binding SelectedPanel}" Value="Selection1">
                    <Setter Property="Visibility" Value="Visible"/>
                </DataTrigger>

                <Trigger Property="Visibility" Value="Visible">
                    <Trigger.EnterActions>
                        <BeginStoryboard Storyboard="{StaticResource SlideInStoryboard}"/>
                    </Trigger.EnterActions>
                </Trigger>
                <Trigger Property="Visibility" Value="Collapsed">
                    <Trigger.ExitActions>
                        <BeginStoryboard Storyboard="{StaticResource SlideOutStoryboard}"/>
                    </Trigger.ExitActions>
                </Trigger>
                <Trigger Property="Visibility" Value="Hidden">
                    <Trigger.ExitActions>
                        <BeginStoryboard Storyboard="{StaticResource SlideOutStoryboard}"/>
                    </Trigger.ExitActions>
                </Trigger>
            </Style.Triggers>
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto"/>
            <ColumnDefinition Width="*"/>
        </Grid.ColumnDefinitions>

        <Label Grid.Column="0" Content="Text:" FontWeight="Bold"/>
        <TextBox Grid.Column="1" HorizontalAlignment="Stretch" VerticalAlignment="Center" Width="Auto" Height="25" Background="White" Margin="100,0,5,0"/>
    </Grid>
</StackPanel>

修改后的代码

StackPanel 代码

<StackPanel x:Name="Selection1Panel" Grid.Row="1">
    <StackPanel.Style>
        <Style TargetType="StackPanel" BasedOn="{StaticResource AnimatedPanelStyle}">
            <Setter Property="Visibility" Value="Collapsed" />
            <Style.Triggers>
                <DataTrigger Binding="{Binding SelectedPanel}" Value="Selection1">
                    <Setter Property="Visibility" Value="Visible" />
                    <DataTrigger.EnterActions>
                        <BeginStoryboard Storyboard="{StaticResource SlideInStoryboard}" />
                    </DataTrigger.EnterActions>
                    <DataTrigger.ExitActions>
                        <BeginStoryboard Storyboard="{StaticResource SlideOutStoryboard}" />
                    </DataTrigger.ExitActions>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </StackPanel.Style>
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto"/>
            <ColumnDefinition Width="*"/>
        </Grid.ColumnDefinitions>

        <Label Grid.Column="0" Content="Path:" FontWeight="Bold"/>
        <TextBox Grid.Column="1" HorizontalAlignment="Stretch" VerticalAlignment="Center" Width="Auto" Height="25" Background="White" Margin="100,0,5,0"/>
    </Grid>
</StackPanel>

动画资源字典

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

    <Storyboard x:Key="SlideInStoryboard" FillBehavior="HoldEnd">
        <DoubleAnimation Storyboard.TargetProperty="(UIElement.RenderTransform).(TranslateTransform.X)"
                         From="100" To="0" Duration="0:0:1.5">
            <DoubleAnimation.EasingFunction>
                <QuadraticEase EasingMode="EaseOut"/>
            </DoubleAnimation.EasingFunction>
        </DoubleAnimation>

        <DoubleAnimation Storyboard.TargetProperty="Opacity"
                         From="0" To="1" Duration="0:0:1.5">
            <DoubleAnimation.EasingFunction>
                <QuadraticEase EasingMode="EaseOut"/>
            </DoubleAnimation.EasingFunction>
        </DoubleAnimation>
    </Storyboard>

    <Storyboard x:Key="SlideOutStoryboard" FillBehavior="Stop">
        <DoubleAnimation Storyboard.TargetProperty="(UIElement.RenderTransform).(TranslateTransform.X)"
                         From="0" To="100" Duration="0:0:1.5">
            <DoubleAnimation.EasingFunction>
                <QuadraticEase EasingMode="EaseIn"/>
            </DoubleAnimation.EasingFunction>
        </DoubleAnimation>
        <DoubleAnimation Storyboard.TargetProperty="Opacity"
                         From="1" To="0" Duration="0:0:1.5">
            <DoubleAnimation.EasingFunction>
                <QuadraticEase EasingMode="EaseIn"/>
            </DoubleAnimation.EasingFunction>
        </DoubleAnimation>
    </Storyboard>

    <Style x:Key="AnimatedPanelStyle" TargetType="StackPanel">
        <Setter Property="RenderTransform">
            <Setter.Value>
                <TranslateTransform X="100"/>
            </Setter.Value>
        </Setter>
        <Setter Property="Opacity" Value="0"/>
        <Style.Triggers>
            <EventTrigger RoutedEvent="StackPanel.Loaded">
                <BeginStoryboard Storyboard="{StaticResource SlideInStoryboard}"/>
            </EventTrigger>
            <EventTrigger RoutedEvent="StackPanel.Unloaded">
                <BeginStoryboard Storyboard="{StaticResource SlideOutStoryboard}"/>
            </EventTrigger>
        </Style.Triggers>
    </Style>
</ResourceDictionary>

内容的提问来源于stack exchange,提问作者NeoGenesis521

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 15:44:52