다음을 통해 공유


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 에 속성을 구현합니다. 속성 setter는 값이 변경되는 경우 이전 값이 논리 트리와 클래스별 시각적 컬렉션에서 제거되도록 설계되었습니다. 속성 값이 캐시된 다음 새 값이 논리 트리와 사용자 지정 시각적 컬렉션 모두에 추가됩니다.

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 이벤트의 클래스 처리, 생성자 또는 컬렉션 형식 자체 내에서 수행할 수 있습니다.

컨트롤 작성자의 경우 사용 가능한 기본 컨트롤 클래스에 대한 콘텐츠 모델이 컨트롤 시나리오에 적합하지 않는 한 이 수준에서 논리 트리를 조작하는 것은 권장되지 않습니다. 및 ItemsControlHeaderedItemsControl의 수준에서 ContentControl서브클래싱을 고려합니다. 이러한 클래스는 전용 API를 통해 논리 트리 자식 요소의 특정 적용을 포함하는 콘텐츠 모델뿐만 아니라 템플릿을 통한 스타일 지정과 같은 WPF 컨트롤에서 일반적으로 바람직한 다른 기능에 대한 지원을 제공합니다. 사용 LogicalChildren AddLogicalChild방법에 대한 자세한 내용은 WPF의 트리를 참조하세요.

AddLogicalChild 는 논리 트리가 다른 프로세스에 의해 반복될 때 호출되는 경우 예외를 throw할 수 있습니다.

적용 대상

추가 정보