技术开发 频道

WPF企业应用基础:布局综合应用

  控件的最终大小和位置是由该控件和父控件共同完成的,父控件会先给子控件提供可用空间(availableSize),子控件再反馈给父控件一个自己的期望值(DesiredSize),父控件最后根据自己所拥有的空间大小与子控件的期望值分配一定的空间给子控件并返回自己的大小.那么这个过程就是通过MeasureOverride 和ArrangeOverride这两个方法来完成(注意父控件的availableSize是减去Margin、padding等的值)。

  本来想自己开发一个较复杂的Panel控件放上来,但一搜网络,发现已经有很多很好的Panel控件,所以在这里我也不写那么多了,大家可以研究一下这些控件,我也研究了几个,觉得最好理解且最美观的当属“FishEyePanel & FanPanel, Paul Tallett, codeproject ”,大家可以根据链接过去看一下,Paul Tallett讲解得非常的细致。

  TreeMapPanel, Kevin Moore (see bag-o-tricks for code)

  AnimatingTilePanel, Kevin Moore (see bag-o-tricks for code)

  Disposing Virtualizing Stack Panel, Aaron, WiredPrairie.us

  TimeLinePanel, Rob Zelt, robzelt.com (with credit to Robert Ingebretsen and Lauren Lavoie)

  Chart and Lens Panel by John Stewien (code available?)

  DiagonalPanel

  FishEyePanel & FanPanel, Paul Tallett, codeproject

  RadiaPanel & ItemsRadialPanel, Rhett log (Henry Hahn posted a Radial panel in 2005, but I'm not sure if it runs or not?)

  DisclaimerPanel, Chaz

  SpanningStackPanel, Nick Theusen

  PlotPanel, Windows SDK Sample

  CollapsiblePanel, Thomas Lebrun

  CornerStacker, Nick Thuesen

  StickyPanel, Unni, Blend PM

  ItemSkimmingPanel, Pavan Podila

  顺便也链接两幅图:

2

2

  讲到这里,我们也顺便提一下写WPF自定义控件的几个步骤,以后在讲到这一节的时候会详细讲解:

  首先你得清楚你的自定义控件是干什么用的(能解决什么问题)?公用到什么程度(其他项目也可以用、本项目用、项目当中一个模块用、只有一个地方用)?是继承已有的控件还是从头写?对设计时是否支持?样式和模板的定义等。

  确定好了上面的步骤后,我们就可以建立项目的结构,类和资源文件等该放在什么位置也就在这一步确定。

  选择要继承的基类(UIElement、FrameworkElement 、Control 、ContentControl 、HeaderedContentControl 、ItemsControl 、Selector 、RangeBase还是已有的一些控件)。

  重写默认的样式和新建一些样式并附默认值。

  由于WPF的属性基本都是依赖属性,所以我们也要新建一些依赖属性。

  逻辑树和视觉树的一些处理以及事件等。

0
相关文章