博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
WPF ListView控件设置奇偶行背景色交替变换以及ListViewItem鼠标悬停动画
阅读量:6830 次
发布时间:2019-06-26

本文共 3977 字,大约阅读时间需要 13 分钟。

原文:

利用WPF的ListView控件实现类似于Winform中DataGrid行背景色交替变换的效果,同时增加鼠标的悬停效果。

1.本文实现的效果如下:

2.所有的效果,我通过C#代码实现。代码如下:

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Windows.Controls;using System.Windows;using System.Windows.Media;using System.ComponentModel;using System.Windows.Media.Animation;namespace BarCodeSystem{    public class ListViewItemStyleSelector:StyleSelector    {        private Dictionary> storyboards = new Dictionary>();                ///         /// 下面的示例演示如何定义一个为行定义 Style 的 StyleSelector。        /// 此示例依据行索引定义 Background 颜色,为每行定义ListViewItem的动画板(Storyboard)。        ///ListView控件在初始化的时候,每初始化一行ListViewItem的时候都会进入该函数        ///         ///         ///         ///         public override Style SelectStyle(object item, DependencyObject container)        {            Style st = new Style();            st.TargetType=typeof(ListViewItem);            Setter backGroundSetter = new Setter();            backGroundSetter.Property = ListViewItem.BackgroundProperty;            ListView listview =                ItemsControl.ItemsControlFromItemContainer(container)                as ListView;//获得当前ListView            int index =                listview.ItemContainerGenerator.IndexFromContainer(container);//行索引            if (index % 2 == 0)            {                backGroundSetter.Value = Brushes.AliceBlue;            }            else            {                backGroundSetter.Value = Brushes.Transparent;            }            st.Setters.Add(backGroundSetter);            //获得当前ListViewItem            ListViewItem iteml = (ListViewItem)listview.ItemContainerGenerator.ContainerFromIndex(index);                        //故事板列表,用来存放1.鼠标进入故事板2.鼠标离开故事板            List sbl = new List();            //声明故事板            Storyboard storyboard = new Storyboard();            //1.鼠标进入故事板            //声明动画            DoubleAnimation fontEnterAnimation = new DoubleAnimation();            //动画的目标值            fontEnterAnimation.To = 16;            //开始之前的等待时间,设置0.5s的等待时间是为了模拟“悬停时间”            fontEnterAnimation.BeginTime = TimeSpan.FromSeconds(0.5);            //动画持续时间            fontEnterAnimation.Duration = TimeSpan.FromSeconds(1);            //动画缓动,可要可不要            fontEnterAnimation.EasingFunction = new ElasticEase() { EasingMode=EasingMode.EaseOut};            //绑定动画目标控件            Storyboard.SetTarget(fontEnterAnimation, iteml);            //绑定动画目标属性            Storyboard.SetTargetProperty(fontEnterAnimation, new PropertyPath("FontSize"));            //将动画板添加到故事板中            storyboard.Children.Add(fontEnterAnimation);            sbl.Add(storyboard);            //2.鼠标离开故事板            storyboard = new Storyboard();            DoubleAnimation fontLeaveAnimation = new DoubleAnimation();            fontLeaveAnimation.BeginTime = TimeSpan.FromSeconds(0);            fontLeaveAnimation.Duration = TimeSpan.FromSeconds(0.5);            Storyboard.SetTarget(fontLeaveAnimation, iteml);            Storyboard.SetTargetProperty(fontLeaveAnimation, new PropertyPath("FontSize"));            storyboard.Children.Add(fontLeaveAnimation);            sbl.Add(storyboard);            storyboards.Add(iteml, sbl);            //绑定鼠标进入事件            iteml.MouseEnter += new System.Windows.Input.MouseEventHandler(iteml_MouseEnter);            //绑定鼠标离开事件            iteml.MouseLeave += new System.Windows.Input.MouseEventHandler(iteml_MouseLeave);            return st;        }        ///         /// 鼠标进入事件        ///         ///         ///         private void iteml_MouseEnter(object sender, RoutedEventArgs e)        {            ListViewItem item=(ListViewItem)sender;            List storyboard = storyboards[item];            storyboard[0].Begin();        }        private void iteml_MouseLeave(object sender, RoutedEventArgs e)        {            ListViewItem item = (ListViewItem)sender;            List storyboard = storyboards[item];            storyboard[1].Begin();        }    }}

3.Xaml文件中代码如下:

 

4.完成。

你可能感兴趣的文章
CentOS 7下安装Tomcat到服务
查看>>
[wireshark]实用技巧整理收集
查看>>
Es6 写的文件import 起来解决方案详解
查看>>
[译] ConstraintLayout基础系列之参照线guidelines
查看>>
JS中可能用得到的全部的排序算法
查看>>
actor ceo ex3ndr 介绍的actor,java,gwt,j2obj的框架体系
查看>>
Mysql 出现the right syntax to use near USING BTREE错误解决办法
查看>>
npm scripts 官方文档(译)
查看>>
C++考题
查看>>
Windows系统下angular2环境搭建
查看>>
PHP - 魔术常量、魔术方法
查看>>
Python技术点
查看>>
es5 操作符运算标准
查看>>
前端技术选型的遗憾和经验教训
查看>>
详解ChinaCache分层自动化测试平台
查看>>
亚马逊发布新的AWS Step Functions集成
查看>>
敏捷2016大会主题演讲:现代敏捷
查看>>
一份关于Angular的倡议清单
查看>>
Service Mesh是大方向,那Database Mesh呢?
查看>>
Swift 4.1带来条件一致性等语言上的提升
查看>>