【问题标题】:WPF: ArrangeOverride in Customized StackPanelWPF:自定义 StackPanel 中的 ArrangeOverride
【发布时间】:2011-07-07 03:35:58
【问题描述】:

我想制作一个自定义面板(除其他外)在所有子项之间插入间距。从 Panel 继承似乎非常复杂,也许没有必要。我想要的是接近 StackPanel 所以我想我可以从 StackPanel 继承并修改 ArrangeOverride 和 MeasureOverride 以获得我想要的。 我从 Reflector 获得了这些的实现,但立即注意到一个属性根本无法从继承的类访问,即 IsScrolling(和字段 _scrollData)。我的问题是我是否可以跳过这个,或者是否有任何其他方式来实现相同的行为?我不确定我是否需要滚动这个自定义面板,但我可能有一天会这样做,我不想把自己画到角落里......

【问题讨论】:

    标签: wpf scroll panel stackpanel


    【解决方案1】:

    如果您只想让容器内的所有元素自动包含边距定义,那么您最好创建一个实现该功能的自定义行为。

    要创建自定义行为,只需实现Behavior<Panel>。这是不言自明的,但如果你不知道怎么做,那就问吧。

    【讨论】:

    • 我想在不使用边距的情况下在孩子之间添加空间(他们自己也应该能够使用其他边距),并且我希望能够指定一个填充属性来停靠/填充孩子们根据一些规则,我想添加一个分组属性来分隔具有更大空间的孩子组等。我可以用行为来做这一切吗?好像自定义 Panel 更合适?
    • 在这种情况下,是的,自定义面板是要走的路。至于你的问题 - 我认为这是 IScrollInfo 基础设施的一部分,用于处理 ScrollViewer 集成。如果您在滚动时不需要自定义行为,我认为您可以忽略它。
    • 我是第二个 Elad,你真的需要一个字符串理由去自定义面板路线。依赖现有功能总是很好的。对于初学者,我建议将 Dock 面板作为主要的 UI 元素更合适,因为使用了 Fill。如果您不想弄乱元素边距,可以通过包含“间隔”元素来完成边距。可以通过将堆栈面板用作子级来完成分组。你能给我们发一张它应该是什么样子的图片吗?
    • 我注意到 DockPanel 的实现比 StackPanel 简单得多。我将使用 DockPanel 作为蓝图来创建我的自定义面板。感谢您的提示...
    猜你喜欢
    • 1970-01-01
    • 2014-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-25
    • 2018-03-17
    相关资源
    最近更新 更多