FrameworkElement.RemoveLogicalChild(Object) 方法

定义

从此元素的逻辑树中删除所提供的对象。 FrameworkElement 将更新受影响的逻辑树父指针,以便与此删除操作保持同步。

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

参数

child
Object

要移除的元素。

示例

以下示例在 Child 执行自己的可视化层实现的自定义 FrameworkElement 上实现属性。 属性的 setter 设计为在值发生更改时,将从逻辑树以及特定于类的视觉集合中删除旧值。 缓存值,然后将新值添加到标准 WPF 框架级别逻辑树和自定义视觉对象集合。

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 或 setters、事件的类处理程序 Changed 、构造函数或集合类型本身中完成。

对于控件作者,建议不要在此级别操作逻辑树,除非所提供的基控件类的内容模型都不合适。 请考虑在 、 ItemsControlHeaderedItemsControl级别ContentControl进行子类化。 这些类通过专用 API 提供具有逻辑子级特定强制实施的内容模型,以及对 WPF 控件中通常所需的其他功能的支持,例如通过模板设置样式。

适用于

另请参阅