FrameworkElement.AddLogicalChild(Object) 方法

定义

将提供的对象添加到此元素的逻辑树。

protected public:
 void AddLogicalChild(System::Object ^ child);
protected internal void AddLogicalChild (object child);
member this.AddLogicalChild : obj -> unit
Protected Friend Sub AddLogicalChild (child As Object)

参数

child
Object

要添加的子元素。

示例

以下示例在 Child 执行其自己的视觉层实现的自定义 FrameworkElement 上实现属性。 属性集旨在使值发生更改时,将从逻辑树中删除旧值,以及特定于类的视觉对象集合。 将缓存属性值,然后将新值添加到逻辑树和自定义视觉对象集合。

public virtual UIElement Child
{
    get
    {
        return _child;
    }
    set
    {
        if (_child != value)
        {
            //need to remove old element from logical tree
            if (_child != null)
            {
                OnDetachChild(_child);
                RemoveLogicalChild(_child);
            }

            _vc.Clear();

            if (value != null)
            {
                //add to visual
                _vc.Add(value);
                //add to logical
                AddLogicalChild(value);
            }

            //always add the overlay child back into the visual tree if its set
            if (_overlayVisual != null)
                _vc.Add(_overlayVisual);

            //cache the new child
            _child = value;

            //notify derived types of the new child
            if (value != null)
                OnAttachChild(_child);

            InvalidateMeasure();
        }
    }
}
<System.ComponentModel.DefaultValue(GetType(Object), Nothing)>
Public Overridable Property Child() As UIElement
    Get
        Return _child
    End Get
    Set(ByVal value As UIElement)
        If _child IsNot value Then
            'need to remove old element from logical tree
            If _child IsNot Nothing Then
                OnDetachChild(_child)
                RemoveLogicalChild(_child)
            End If

            _vc.Clear()

            If value IsNot Nothing Then
                'add to visual
                _vc.Add(value)
                'add to logical
                AddLogicalChild(value)
            End If

            'always add the overlay child back into the visual tree if its set
            If _overlayVisual IsNot Nothing Then
                _vc.Add(_overlayVisual)
            End If

            'cache the new child
            _child = value

            'notify derived types of the new child
            If value IsNot Nothing Then
                OnAttachChild(_child)
            End If

            InvalidateMeasure()
        End If
    End Set
End Property

注解

使用此方法实现表示元素的逻辑子元素的对象上的集合。 子元素集合的集合维护可以在属性 getter 或 setter、Changed 事件、构造函数的类处理或集合类型本身中进行。

对于控制作者,除非没有可用于基本控件类的内容模型适合你的控制方案,否则在此级别操作逻辑树并不是建议的做法。 考虑子类的级别 ContentControlItemsControl以及 HeaderedItemsControl。 这些类通过专用 API 提供具有特定强制实施逻辑树子元素的内容模型,以及对 WPF 控件中通常所需的其他功能的支持,例如通过模板进行样式设置。 有关如何使用 LogicalChildrenAddLogicalChild查看 WPF 中的树的详细信息。

AddLogicalChild 如果在逻辑树被另一个进程迭代时调用,可能会引发异常。

适用于

另请参阅