wpf - WPF 中的 ListBoxItem - 选中时缩放动画

标签 wpf animation triggers listbox listboxitem

我有一个 ListBox与定制项目的风格。我希望该项目在选择时变大一点,并在取消选择时恢复到其原始大小。我尝试了几种解决方案,但似乎都没有奏效。我认为问题在于Storyboard.TargetProperty的正确设置.

我当前的 XAML 如下所示:

...
<ListBox.Resources>                   
    <Style TargetType="{x:Type ListBoxItem}">
        <Style.Triggers>
            <Trigger Property="IsSelected" Value="True">
                <Trigger.EnterActions>
                    <BeginStoryboard>
                        <Storyboard>
                            <DoubleAnimation Storyboard.TargetProperty="LayoutTransform.(ScaleTransform.ScaleX)" To="1.2" Duration="0:0:.3" AutoReverse="True"/>
                        </Storyboard>
                    </BeginStoryboard>
                </Trigger.EnterActions>
            </Trigger>
        </Style.Triggers>
    </Style>
</ListBox.Resources>
...

我的最终代码(已应用答案):
...
<ListBox.Resources>                   
    <Style TargetType="{x:Type ListBoxItem}">
        <Setter Property="RenderTransformOrigin" Value="0.5,0.5" />
        <Setter Property="RenderTransform">
            <Setter.Value>
                <ScaleTransform />
            </Setter.Value>
        </Setter>
        <Style.Triggers>
            <Trigger Property="IsSelected" Value="True">
                <Trigger.EnterActions>
                    <BeginStoryboard>
                        <Storyboard>
                            <DoubleAnimation Storyboard.TargetProperty="RenderTransform.ScaleX" To="1.1" Duration="0:0:.1" />
                            <DoubleAnimation Storyboard.TargetProperty="RenderTransform.ScaleY" To="1.1" Duration="0:0:.1" />
                        </Storyboard>
                    </BeginStoryboard>
                </Trigger.EnterActions>
                <Trigger.ExitActions>
                    <BeginStoryboard>
                        <Storyboard>
                            <DoubleAnimation Storyboard.TargetProperty="RenderTransform.ScaleX" To="1.0" Duration="0:0:.1" />
                            <DoubleAnimation Storyboard.TargetProperty="RenderTransform.ScaleY" To="1.0" Duration="0:0:.1" />
                        </Storyboard>
                    </BeginStoryboard>
                </Trigger.ExitActions>
            </Trigger>
        </Style.Triggers>
    </Style>
</ListBox.Resources>
...

最佳答案

尝试使用以下代码:

...
<ListBox.Resources>
    <Style TargetType="{x:Type ListBoxItem}">
        <Setter Property="LayoutTransform">
            <Setter.Value>
                <ScaleTransform x:Name="scaleTransform" />
            </Setter.Value>
        </Setter>
        <Style.Triggers>
            <Trigger Property="IsSelected" Value="True">
                <Trigger.EnterActions>
                    <BeginStoryboard>
                        <Storyboard>
                            <DoubleAnimation Storyboard.TargetProperty="LayoutTransform.ScaleX" To="1.2" Duration="0:0:.3" AutoReverse="True"/>
                        </Storyboard>
                    </BeginStoryboard>
                </Trigger.EnterActions>
            </Trigger>
        </Style.Triggers>
    </Style>
</ListBox.Resources>
...

关于wpf - WPF 中的 ListBoxItem - 选中时缩放动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19612093/

相关文章:

WPF应用启动问题

css - 仅使用 CSS3 在悬停时旋转并在动画后停止?

c# - Storyboard /动画的 "handful"影响性能?

mysql - 使用存储过程中的值更新触发器中的表

c# - TextBlock 未使用 ViewModel 的属性进行更新

wpf - 在 ItemsControl 中绑定(bind)到 Item 的 DataContext

MySql 在插入更新之前触发计数

mysql - 在 MySQL 表上添加新触发器时犯了什么错误?

c# - 如何使用 Epplus 在 C# (WPF) 中将批量数据导出到 Excel?

animation - 使用 Snap.svg 循环动画