在WPF中添加带有AddLogicalChild、AddVisualChild的UIElement
我通过简单地扩展/继承面板创建了画布的自定义版本 当我想在上面绘制或渲染某些东西时,我只需创建一个在WPF中添加带有AddLogicalChild、AddVisualChild的UIElement,wpf,panel,uielement,Wpf,Panel,Uielement,我通过简单地扩展/继承面板创建了画布的自定义版本 当我想在上面绘制或渲染某些东西时,我只需创建一个DrawingVisual,绘制所需的图形并调用AddLogicalChild(Visual),AddVisualChild(Visual),并增加面板的视觉效果计数 当我添加DrawingVisual实例时,这非常有效,但当我尝试在此处添加按钮并定义尺寸(MinHeight,MinWidth)时,它不会显示 ui元素是否可能需要显示不同的处理逻辑?基本上,我如何才能将UIElement添加到将要显
DrawingVisual
,绘制所需的图形并调用AddLogicalChild(Visual)
,AddVisualChild(Visual)
,并增加面板的视觉效果计数
当我添加DrawingVisual
实例时,这非常有效,但当我尝试在此处添加按钮
并定义尺寸(MinHeight
,MinWidth
)时,它不会显示
ui元素
是否可能需要显示不同的处理逻辑?基本上,我如何才能将UIElement
添加到将要显示并可使用操作的扩展面板中?对于UIElement
s,使用的是集合子对象
:
public void AddChild(UIElement newChild)
{
this.Children.Add(newChild);
}
您还应该查看建议在面板
s的扩展中使用的集合。该功能已经包含在内。如果要将ui元素
添加到面板
,只需使用.Children.add()
然后在您的实现中,覆盖MeasureOverride
和ArrangeOverride
以迭代子项并在面板上组织它们
这里的示例:如果只使用UIElement
s,首选的方法是将该项添加到子项
集合中
但是如果您混合了UIElement
s和Visual
s,我建议使用AddLogicalChild
/AddVisualChild
方法,而不是子对象。但是,这需要做更多的工作:
使用AddLogicalChild
和AddVisualChild
将项(Visual
s以及UIElement
s)添加为逻辑和可视子项
将物品存放在某个地方(面板无法为您执行此操作)
覆盖GetVisualChild
和VisualChildrenCount
并返回传递索引上的项目数/项目数
覆盖测量覆盖,调用UIElement。对每个UIElement
进行测量,并执行面板特定的所有其他测量工作
覆盖排列覆盖,调用UIElement。为每个UIElement
排列
,并执行面板特定的所有其他排列操作
请注意,在将UIElement添加到面板
后,必须调用测量
和排列
就这样。:) 这是正确的,但是AddLogicalChild/AddVisualChild会覆盖任何其他视觉效果。换句话说,当我通过调用这两个方法创建visual时,子对象就不会被绘制。好的,我尝试添加到InternalChildren集合中,但在视觉上什么都没有发生。我猜有两种可能的情况:要么是视觉效果和添加…Child不打算与现有控件一起使用,要么我缺少一些东西。。。