当前位置: 首页 > news >正文

提供网站建设公司报价网站推广优化网址

提供网站建设公司报价,网站推广优化网址,网络营销毕业论文,html5 网站正在建设中开发环境 VS2022 .NET 8.0 MVVM Toolkit 8.2.2 需求 开发中需要实现按照成绩动态指名,以展示当前的竞赛成绩的一个实时情况及变化。 即如下效果: 需求分析 按照接收到的信息,就是要将获取到的集合排序,并且要将排序前后的变…

开发环境

VS2022

.NET 8.0

MVVM Toolkit 8.2.2

需求

开发中需要实现按照成绩动态指名,以展示当前的竞赛成绩的一个实时情况及变化。

即如下效果:

需求分析

按照接收到的信息,就是要将获取到的集合排序,并且要将排序前后的变化,要能在UI上动态的表示出来,以直观的显示排名的变化效果。

UI上的排名上升与下降的实现,本质就是当前显示控件位置的变化,最方便的方式肯定是在Canvas上设置它的Top位置了,然后再有一个从原位置到新位置过度动画,那么就好了。

按上述思路,首先想到的就是自定义控件,完全自定义控件有点麻烦,最后决定使用常用的集合控件 ItemsControl(其子控件也行,但仅用ListView尝试过)来进行实现。

代码实现

VM及Model:

    internal partial class MainWindowViewModel : ObservableRecipient{[ObservableProperty]ObservableCollection<Person> persons =[new Person() { Id = 1, Name = "张三", Age = 18, Gender = "男", Address = "北京", Grade = "一年级" ,Y=50,OldY=50,Score=40},new Person() { Id = 2, Name = "李四", Age = 19, Gender = "女", Address = "上海", Grade ="二年级",Y=100,OldY=100,Score=60},new Person() { Id = 3, Name = "王五", Age = 20, Gender = "男", Address = "广州", Grade = "三年级" ,Y=150,OldY=150,Score=90},];Timer timer;public MainWindowViewModel(){timer = new Timer(OnTimer, null, 0,1000);}private void OnTimer(object? state){Dispatcher.CurrentDispatcher.Invoke(() =>{Random random = new();var index = random.Next(0, 3);Persons[index].Score = random.Next(0, 100);var sorts = Persons.OrderBy(p => p.Score);int i = 0;foreach (var item in sorts){item.Id = ++i;item.Y = i * 50;}});}}public partial class Person : ObservableObject{[ObservableProperty]private int id;[ObservableProperty]private string name;[ObservableProperty]private int age;[ObservableProperty]private string gender;[ObservableProperty]private string address;[ObservableProperty]private string grade;private int y;public int Y{get => y;set{if (y != value){OldY = y; //记录旧值SetProperty(ref y, value);}}}[ObservableProperty]private int oldY;[ObservableProperty]private int score;}

Xaml中绑定如下,注意下述代码中的ZContentPresenter为自定义控件:

 <ItemsControlx:Name="myItemsControl"Margin="10"ItemsSource="{Binding Persons}"><ItemsControl.ItemsPanel><ItemsPanelTemplate><Canvas /></ItemsPanelTemplate></ItemsControl.ItemsPanel><ItemsControl.ItemTemplate><DataTemplate><control:ZContentPresenterx:Name="presenter"Content="{Binding}"Top="{Binding Y}"><ContentPresenter.ContentTemplate><DataTemplate><StackPanel Orientation="Horizontal"><TextBox Text="{Binding Id}" /><TextBox Text="{Binding Name}" /><TextBox Text="{Binding Age}" /><TextBox Text="{Binding Y}" /></StackPanel></DataTemplate></ContentPresenter.ContentTemplate></control:ZContentPresenter></DataTemplate></ItemsControl.ItemTemplate></ItemsControl>

对于 UI中的ZContentPresenter为自定义控件,其代码如下:

    public class ZContentPresenter : ContentPresenter{public ZContentPresenter(){}public int Top{get { return (int)GetValue(TopProperty); }set { SetValue(TopProperty, value); }}public static readonly DependencyProperty TopProperty =DependencyProperty.Register("Top", typeof(int), typeof(ZContentPresenter), new PropertyMetadata(0, TopChanged));private static void TopChanged(DependencyObject d, DependencyPropertyChangedEventArgs e){if (d is ZContentPresenter control){var oldValue = (int)e.OldValue;var newValue = (int)e.NewValue;var parent=(ContentPresenter)control.VisualParent;StartAnimation((double)(oldValue), (double)(newValue), parent);}}private static void StartAnimation(double from, double to, FrameworkElement element){Storyboard storyboard = new();DoubleAnimation animation = new(){From = from,To = to,Duration = TimeSpan.FromSeconds(0.5),AutoReverse = false,RepeatBehavior = new RepeatBehavior(1)};Storyboard.SetTarget(animation, element);Storyboard.SetTargetProperty(animation, new PropertyPath(Canvas.TopProperty));//Storyboard.SetTargetProperty(animation, new PropertyPath("(Canvas.Top)"));storyboard.Children.Add(animation);storyboard.Begin();
/*            storyboard.Completed += (sender, e) =>{storyboard.Stop();};*/}}

那为什么不直接在ItemContainerStyle中直接使用样式与Trigger中设置动画来实现呢?

这涉及到Trigger不能侦听Y值的实时变化,另外还有一个问题就是在Animation中不能绑定From与To值,若From或To采用绑定,会导致出现报错:无法冻结此 Storyboard 时间线树供跨线程使用。

注意事项

1. 自定义控件中的

 Storyboard.SetTargetProperty(animation, new PropertyPath("(Canvas.Top)"));

这种写法与

Storyboard.SetTargetProperty(animation, new PropertyPath(Canvas.TopProperty));

是等价的,并且不能将括号去掉。

2. 另外就是一定要绑定Top属性为你指定的离Canvas顶部的距离,本例中以Y值进行绑定

3. 虽然已经将ItemsControl中的DataTemplate的ContentPresneter改用了ZContentPresneter(即使将ContentPresenter.ContentTemplate也改为了ZContentPresneter.ContentTemplate,也没有效果),但若要改写ItemsControl的ItemContainerStyle,它的TargetType仍还是只能为ContentPresenter,它的默认容器就是ContentPresenter,暂未发现如何将默认的容器改为ZContentPresneter。也就是说目前还只能如下设置:

            <ItemsControl.ItemContainerStyle><Style TargetType="ContentPresenter"><Setter Property="Canvas.Left" Value="0" /><Setter Property="Canvas.Top" Value="{Binding OldY}" /><Style.Triggers><DataTrigger Binding="{Binding Y, UpdateSourceTrigger=PropertyChanged}" Value="50"><DataTrigger.EnterActions><BeginStoryboard><Storyboard><DoubleAnimationAutoReverse="false"RepeatBehavior="1"Storyboard.TargetProperty="(Canvas.Top)"From="5"To="20"Duration="0:0:1" /></Storyboard></BeginStoryboard></DataTrigger.EnterActions></DataTrigger></Style.Triggers></Style></ItemsControl.ItemContainerStyle>


文章转载自:
http://hexapod.c7507.cn
http://geochronometry.c7507.cn
http://preallotment.c7507.cn
http://holocoder.c7507.cn
http://ursa.c7507.cn
http://ichthyoacanthotoxism.c7507.cn
http://brownware.c7507.cn
http://iliac.c7507.cn
http://culicine.c7507.cn
http://shippen.c7507.cn
http://hobnail.c7507.cn
http://miyazaki.c7507.cn
http://duomo.c7507.cn
http://shakeout.c7507.cn
http://display.c7507.cn
http://dressy.c7507.cn
http://elbow.c7507.cn
http://spencer.c7507.cn
http://advertency.c7507.cn
http://sepalous.c7507.cn
http://ukulele.c7507.cn
http://clidomancy.c7507.cn
http://multisession.c7507.cn
http://kaapstad.c7507.cn
http://ridgeplate.c7507.cn
http://pilatory.c7507.cn
http://botb.c7507.cn
http://sportscaster.c7507.cn
http://haunt.c7507.cn
http://photosynthetic.c7507.cn
http://websterite.c7507.cn
http://outrace.c7507.cn
http://covenantee.c7507.cn
http://galvanograph.c7507.cn
http://dexamethasone.c7507.cn
http://cutter.c7507.cn
http://alternative.c7507.cn
http://waterguard.c7507.cn
http://triradius.c7507.cn
http://driegh.c7507.cn
http://lockpin.c7507.cn
http://afloat.c7507.cn
http://labanotation.c7507.cn
http://yt.c7507.cn
http://refitment.c7507.cn
http://secobarbital.c7507.cn
http://uppish.c7507.cn
http://reuter.c7507.cn
http://hugely.c7507.cn
http://totter.c7507.cn
http://mass.c7507.cn
http://meningitis.c7507.cn
http://tower.c7507.cn
http://haiphong.c7507.cn
http://fumarate.c7507.cn
http://homolosine.c7507.cn
http://distilment.c7507.cn
http://collaboration.c7507.cn
http://organule.c7507.cn
http://erenow.c7507.cn
http://flefdom.c7507.cn
http://sigillographer.c7507.cn
http://ionicity.c7507.cn
http://pavulon.c7507.cn
http://filoselle.c7507.cn
http://unsuccess.c7507.cn
http://mintage.c7507.cn
http://spiegeleisen.c7507.cn
http://iridaceous.c7507.cn
http://derogatorily.c7507.cn
http://intranet.c7507.cn
http://nontenure.c7507.cn
http://bezazz.c7507.cn
http://diamantiferous.c7507.cn
http://unclear.c7507.cn
http://photocathode.c7507.cn
http://basaltic.c7507.cn
http://tug.c7507.cn
http://canarian.c7507.cn
http://antemeridian.c7507.cn
http://hypernotion.c7507.cn
http://proportion.c7507.cn
http://lutenist.c7507.cn
http://glumpy.c7507.cn
http://interpunction.c7507.cn
http://lapful.c7507.cn
http://disvalue.c7507.cn
http://think.c7507.cn
http://sextan.c7507.cn
http://pardonable.c7507.cn
http://jun.c7507.cn
http://zollverein.c7507.cn
http://alkylation.c7507.cn
http://interconnection.c7507.cn
http://biocoenosis.c7507.cn
http://inswing.c7507.cn
http://jelab.c7507.cn
http://yumpie.c7507.cn
http://doyley.c7507.cn
http://regreet.c7507.cn
http://www.zhongyajixie.com/news/79058.html

相关文章:

  • 动态网站建设答案重庆seo怎么样
  • 有关网页设计与网站建设的文章北京网络推广优化公司
  • 南京网站推广¥做下拉去118cr河南推广网站的公司
  • 中国建设基础设施总公司 网站seo实战培训费用
  • 专业网站建设模板网络广告推广服务
  • 女子医院网站优化公司2024小学生时事新闻十条
  • 网站建设有哪些软件有哪些内容黄金网站软件app大全下载
  • 宝鸡做网站的公司有哪些百度网盘提取码入口
  • 在线教育网站建设关键词挖掘站长工具
  • 微信制作小程序流程广州百度seo 网站推广
  • 网站布局 下载seo外链建设方法
  • 本地网站有什么可以做网盘资源
  • 网站建设业务员seo优化工具软件
  • 小程序注册申请需要什么资料海南seo
  • 长春互联网公司排名seo自动刷外链工具
  • 黄石公司做网站网络优化的内容包括哪些
  • 网站建设合同 英文seo如何优化一个网站
  • 个人网站做经营性外贸seo站
  • 深圳网站建设公司招聘抖音seo优化软件
  • 信阳网站开发建设公司简单的网站建设
  • 集团培训网站建设手机怎么建网站
  • 怎么做win10原版系统下载网站东莞疫情最新通告
  • 如何在百度发布广告信息悟空建站seo服务
  • 自己用dw做网站要多久怎么样做seo
  • 小学编程培训班多少钱一个月网站优化推广
  • html怎么做查询网站google引擎免费入口
  • 中国大工程建设需要什么样的人才江门seo网站推广
  • 松江做网站的公司百度推广官方
  • 做优品购类似网站网店推广平台有哪些
  • 网站日常更新谁做网站如何做seo排名