Wpf 我需要关于如何设计/实现这个定制面板的建议
我编写了一个自定义面板,其中显示了垂直或水平停靠的子面板,子面板之间通过移动拆分器隔开。由于Grid面板提供了很多现成的功能,所以我只是继承了它 要创建布局,在启动加载后,我将执行以下操作:Wpf 我需要关于如何设计/实现这个定制面板的建议,wpf,xaml,panel,itemscontrol,Wpf,Xaml,Panel,Itemscontrol,我编写了一个自定义面板,其中显示了垂直或水平停靠的子面板,子面板之间通过移动拆分器隔开。由于Grid面板提供了很多现成的功能,所以我只是继承了它 要创建布局,在启动加载后,我将执行以下操作: 1) Read how many children it has and create the appropiate number of rows/colums. 2) Position every existing children in the corresponding row/colum. 3) C
1) Read how many children it has and create the appropiate number of rows/colums.
2) Position every existing children in the corresponding row/colum.
3) Create, position and add a GridSplitter for every child.
这种方法看起来很好,工作也很好,但它为许多问题打开了大门:
- 因为它为每个子项添加了一个GridSplitter,所以子项的数量是预期的两倍。如果有人向其中添加3个元素,Children.Count将返回6
- 用户可能在错误的位置插入/删除内容
- 当此网格用作ItemsControl的ItemsPanel时,它只会引发一个异常,因为在这种情况下WPF(不是Silverlight)不允许直接子级操作
提前感谢。您可以看到,使用just grid,您只需使用一种必要的方式来添加项目。如 myCustomGrid1.AddMyItem(***),网格没有ItemsSource属性。ItemsControl会这样做-如果您需要对声明性项源的支持,例如myControl.ItemsSource={Binding…},那么您将从ItemsControl派生控件。这不是一个两行程序——让你的ItemsPanel孩子们可写是一个巨大的挑战——没有简单的方法可以做到这一点 这是网格设计过程中忽略的一件小事——拆分器不应该添加到子集合中,因为子集合是BOs的可视化,而spliiter只是格式化元素 这是我要做的
P.S.S.试了几次后就修好了。嗨,我同意ItemsControl。您正在将项添加到控件中,因此它必须是ItemsControl。在添加项目方面-您想同时使用declrative和祈使方式还是只使用一种?@Dmitry:如果可能的话,我想同时支持这两种方式。有一种根本的方法可以解决这个问题-使用装饰器而不是拆分器:)声明性调用将发出类似控件的调用。Children.为您的项目面板(网格)添加(…)这会破坏你的网格结构。我建议坚持使用装饰物(这将解决您对视觉效果数量的担忧,并使整个设计更加干净)。请告诉我它是否对您有用。@Dmitry:我选择从网格继承,因为它对拆分器的“本机”支持,所以如果我不这样做,我想我必须编写所有这些部分?@Dmitry:另外,如果我能去掉拆分器,我想我会将其作为一个面板来实现。+1似乎我不得不放弃网格实现。。。这太容易了:p