WPF下制作的简单瀑布流效果.docx

上传人:b****5 文档编号:7471793 上传时间:2023-01-24 格式:DOCX 页数:11 大小:1.06MB
下载 相关 举报
WPF下制作的简单瀑布流效果.docx_第1页
第1页 / 共11页
WPF下制作的简单瀑布流效果.docx_第2页
第2页 / 共11页
WPF下制作的简单瀑布流效果.docx_第3页
第3页 / 共11页
WPF下制作的简单瀑布流效果.docx_第4页
第4页 / 共11页
WPF下制作的简单瀑布流效果.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

WPF下制作的简单瀑布流效果.docx

《WPF下制作的简单瀑布流效果.docx》由会员分享,可在线阅读,更多相关《WPF下制作的简单瀑布流效果.docx(11页珍藏版)》请在冰豆网上搜索。

WPF下制作的简单瀑布流效果.docx

WPF下制作的简单瀑布流效果

最近又在搞点小东西,美化界面的时候发现瀑布流效果比较不错.顺便就搬到了WPF,下面是界面

 

我对WEB前端不熟,JS和CSS怎么实现的,我没去研究过,这里就说下WPF的实现思路,相当简单.

1.最重要的就是每个子项的顺序填充,我是把界面看做N列,然后在每列里依次加载子项.最后结果就是,界面放一个Uniform,设置Columns,再添加几个ItemsControl.

2.添加Item的时候,判断每个ItemsControl的实际高度,把子项添加到最小的那个ItemsControl,这样避免了某一列拉得很长.

3.再做一层封装,就变成了一个支持Binding的WaterfallControl.

 

这里上几段控件的源码,供参考:

1.WaterfallControl.cs

1[TemplatePart(Name="grdRoot",Type=typeof(UniformGrid))]

2publicclassWaterfallControl:

ItemsControl

3{

4privateUniformGridgrdRoot;

5

6privateListitemsContorls;

7

8publicintColumns

9{

10get{return(int)GetValue(ColumnsProperty);}

11set{SetValue(ColumnsProperty,value);}

12}

13

14//UsingaDependencyPropertyasthebackingstoreforColumns.Thisenablesanimation,styling,binding,etc...

15publicstaticreadonlyDependencyPropertyColumnsProperty=

16DependencyProperty.Register("Columns",typeof(int),typeof(WaterfallControl),newPropertyMetadata(3,OnColumnsChanged));

17

18privatestaticvoidOnColumnsChanged(DependencyObjectsender,DependencyPropertyChangedEventArgse)

19{

20intcolumns=(int)e.NewValue;

21if(columns<1)

22{

23thrownewArgumentOutOfRangeException("Columns");

24}

25varcontrol=senderasWaterfallControl;

26control.Columns=columns;

27control.InitPanel();

28}

29

30publicWaterfallControl()

31{

32this.Loaded+=WaterfallControl_Loaded;

33this.itemsContorls=newList();

34}

35

36voidWaterfallControl_Loaded(objectsender,RoutedEventArgse)

37{

38this.InitPanel();

39}

40

41privatevoidInitPanel()

42{

43if(!

this.IsLoaded)

44{

45return;

46}

47

48grdRoot.Children.Clear();

49itemsContorls.Clear();

50for(vari=0;i

51{

52varic=newItemsControl();

53ic.ItemTemplate=this.ItemTemplate;

54ic.VerticalAlignment=System.Windows.VerticalAlignment.Top;

55grdRoot.Children.Add(ic);

56itemsContorls.Add(ic);

57}

58

59if(this.ItemsSource!

=null)

60{

61varenumerator=this.ItemsSource.GetEnumerator();

62while(enumerator.MoveNext())

63{

64this.AddChild(enumerator.Current);

65}

66}

67}

68

69publicoverridevoidOnApplyTemplate()

70{

71base.OnApplyTemplate();

72grdRoot=(UniformGrid)this.GetTemplateChild("grdRoot");

73}

74

75protectedoverridevoidAddChild(objectvalue)

76{

77varic=itemsContorls.OrderBy(t=>t.ActualHeight).FirstOrDefault();

78ic.Items.Add(value);

79ic.UpdateLayout();

80}

81

82protectedoverridevoidOnItemsChanged(System.Collections.Specialized.NotifyCollectionChangedEventArgse)

83{

84if(e.Action==NotifyCollectionChangedAction.Add||e.Action==NotifyCollectionChangedAction.Remove)

85{

86varenumerator=e.NewItems.GetEnumerator();

87while(enumerator.MoveNext())

88{

89if(e.Action==NotifyCollectionChangedAction.Add)

90{

91this.AddChild(enumerator.Current);

92}

93else

94{

95foreach(varicinthis.itemsContorls)

96{

97ic.Items.Remove(enumerator.Current);

98}

99}

100}

101}

102}

103}

ViewCode

2.WaterfallControl的样式

WaterfallControl">

WaterfallControl">

ViewCode

3.调用

WaterfallControl继承自ItemsControl,所以和ItemsControl的使用没有区别,只需要额外指定一个Columns即可.

 

可能遇到的问题:

1.遇到图片不能直接计算高度,可能导致某列很长.可以用扩展属性给图片指定一个初始占位高度.

2.遇到界面大小变化,列数是不是应该动态变化,这个要实现也简单,监视下Window.SizeChanged,然后改变Columns就行了.

3.我直接把ScrollViewer放到WaterfallControl的模板里了,建议抽出来,监视下滚动事件,实现滚动到底加载数据.

4.不知道是否有更简单明了的方法.

WPF制作的小型笔记本-仿有道云笔记

楼主所在的公司不允许下载外部资源,不允许私自安装应用程序,平时记录东西都是用记事本,时间久了很难找到以前记的东西.平时在家都用有道笔记,因此就模仿着做了一个,先看下实际运行图片:

1.初始化的时候

2.添加了些笔记

3.添加笔记本窗口

4.改了模板,做的一个还算好看的菜单

5.日记列表可以选择不同的视图,比如我改成了简单列表视图

6.模仿云笔记做的历史版本功能,只能看,还没做还原和对比功能

7.日记可以导出成不同格式,这个东西真心没用

8.顶部也有个菜单

 

谈下这个小东西:

1.程序采用WPF+MVVM实现,修改了大部分控件的Template,以达到高仿的目的.同时,也得感谢有道在安装目录下有一套图片资源,可以原封不动的搬过来美化界面.

2.实现了笔记本的增删改,笔记的增删改.笔记的查询只实现了关键字查询.

3.自己做了一些有意思的控件,比如一个LoadingButton,在Loading的时候会转个圈圈,后台处理完毕后隐藏.还做了一个文本编辑框,其实有道的编辑框相当漂亮,但是没有放出按钮图片,我只有网上淘了些山寨的图片,而且有些功能就没去实现,比如添加表格添加超链接什么的,我自己都不知道这个能干嘛用.

4. 采用SQLite数据库把所有数据保存到了本地,我自己也有虚拟主机,本来想顺便公布一套WEBAPI实现真正的云笔记,但是现在的客户端设计怕是要经过大改才能实现,这个想到就头痛.

5.历史版本功能本来是可以继续做下去的,比如还原到某一版本这个功能就很好做.但是有道有个对比不同文本的功能,这个就像源码管理工具那样,我不知道该怎么整了.

6.本来想实现插入图片的,但是有两个问题,第一就是我们公司没有截图程序,我用不上,第二就是这里的图片只能保存到RTF,加载时会写入内存,数据量大或者图片大了会影响性能.

7.本来也想实现插入文件的,这个对我很有用,不过还没想好UI怎么画,一直就没做.

8.编辑框输入很卡,还没去研究什么原因. 

9.微软的个人版TFS相当不错,我在不能用U盘的情况下,家里和办公室都可以开发.

最后,实在是觉得很遗憾,一个项目我可以兴冲冲的很快完成70%的代码,但是剩下的30%就实在太折磨人了.现在一打开VS就犯困,实在是没法把剩下的东西全部实现完.这个笔记目前在公司运行良好,我需要的功能几乎都有,也就不打算再继续下去了.在此放出源代码,供有兴趣的同学研究下控件样式,MVVM,Prism,依赖注入等WPF里面常见的问题.

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1