wpf listbox实现选中动画

效果如下:
在这里插入图片描述
参考:https://github.com/WPFDevelopersOrg/WPFDevelopers/blob/master/src/WPFDevelopers.Samples.Shared/Controls/NavigateMenu/NavigateMenu.xaml
实现上述效果的前台代码:

<Window
    x:Class="ListBox.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:local="clr-namespace:ListBox"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    Title="MainWindow"
    Width="800"
    Height="450"
    mc:Ignorable="d">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition />
        </Grid.ColumnDefinitions>
        <ListBox x:Name="listbox">
            <ListBoxItem>1</ListBoxItem>
            <ListBoxItem>2</ListBoxItem>
            <ListBoxItem>3</ListBoxItem>
            <ListBoxItem>4</ListBoxItem>
            <ListBoxItem>5</ListBoxItem>
        </ListBox>
        <Rectangle
            x:Name="rect"
            Width="2"
            Height="20"
            HorizontalAlignment="Left"
            VerticalAlignment="Top"
            Fill="Red">
           
        </Rectangle>
    </Grid>
</Window>

后台代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace ListBox
{
    /// <summary>
    /// MainWindow.xaml 的交互逻辑
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            this.listbox.SelectionChanged += Listbox_SelectionChanged;
        }

        private double? lastX = null;
        private double? lastY = null;
        private void Listbox_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            var itemTo = e.AddedItems[0] as ListBoxItem;
            var pointTo = itemTo.TranslatePoint(new Point(0, 0), this);
 
            var toMargin = new Thickness(pointTo.X, pointTo.Y, 0, 0);
            ThicknessAnimation ani = new ThicknessAnimation();
            ani.To = toMargin;
            ani.Duration = TimeSpan.FromSeconds(0.3);
            this.rect.BeginAnimation(Rectangle.MarginProperty, ani);
            ani.Completed += (ss, ee) =>
            {
                this.rect.Margin = toMargin;
            };
        }
    }
}

同理,依据此,可以实现TabControlTabItem选中动画

相关推荐

  1. css动画旋转效果实现

    2024-06-06 21:20:02       37 阅读
  2. Flutter中动画实现

    2024-06-06 21:20:02       20 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-06-06 21:20:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-06 21:20:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-06 21:20:02       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-06 21:20:02       20 阅读

热门阅读

  1. 修改el-select默认样式

    2024-06-06 21:20:02       8 阅读
  2. CDN访问与直接访问源站得到的结果不一样

    2024-06-06 21:20:02       7 阅读
  3. Lua封装函数模块并由其他模块调用

    2024-06-06 21:20:02       9 阅读
  4. 设计模式之责任链模式

    2024-06-06 21:20:02       8 阅读
  5. GPT-4o横空出世,如何评价GPT-4o?

    2024-06-06 21:20:02       7 阅读
  6. 计算机网络 3.7广域网

    2024-06-06 21:20:02       9 阅读
  7. Ubuntu下搭建与配置PPPoE server

    2024-06-06 21:20:02       8 阅读
  8. 嵌入式Qt开发C++基础编程

    2024-06-06 21:20:02       8 阅读
  9. 【PECL】在扩展中实现 autoload

    2024-06-06 21:20:02       10 阅读
  10. Opengrok代码在线查看平台

    2024-06-06 21:20:02       7 阅读
  11. leetcode部分简单题题解

    2024-06-06 21:20:02       9 阅读