创建自定义WPF布局面板 - 忽略的孩子不会消失

时间:2010-05-03 19:29:58

标签: wpf layout

下午好。我正在创建一个自定义WPF布局控件,如果它们不适合可用区域,则需要从度量/排列过程中省略子项。我正在使用Blend进行测试。

我尝试重写GetVisualChild(n)和VisualChildCount以尝试允许运行时仅将某些元素识别为我想要的子元素。这似乎工作正常,但我遇到的一个大问题是:

我将一些孩子从Blend中删除到我的布局控件中。然后我缩小了控制,其中一些孩子不适合我的面板。问题是不再在视图中的子项仍然在Blend设计图面上呈现。我试图使他们的视觉效果无效,调用“RemoveVisualChildI()”..但似乎没有任何东西想让渲染的视觉效果消失。

打破GetViasualChild(...)方法,我正在见证Blend,运行时只询问实际的可见子项(完全包含在我的布局面板中)。因此,在我看来,问题与子元素有关,认为它们仍然需要被渲染......或者容器面板只是不知道它需要重新渲染。

任何线索?如果需要,我可以尝试提供更多细节,但我的基本需求是能够选择性地隐藏/显示(从测量/安排过程中省略)自定义面板的某些孩子。

谢谢! - 肖恩

1 个答案:

答案 0 :(得分:1)

由于没有人回应,我想我会分享解决方案。可视树是通过Visual基类上的AddVisualChild(...)方法建立的。专家组通过它的儿童系列为您解决这个问题。要解决这个问题,我需要做的就是创建一个UIElementCollection的实例,让它做脏工作。创建该类时,将传递可视父级和可选逻辑父级。将元素添加到该集合时,将自动建立父/子关系。

希望这有助于下一个人!