次の方法で共有


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

注釈

このメソッドは、要素の論理子要素を表すオブジェクトに対するコレクションの実装に使用します。 子要素コレクションのコレクションメンテナンスは、プロパティゲッターまたはセッター、Changed イベント、コンストラクター、またはコレクション型自体のクラス処理で行うことができます。

コントロール作成者の場合、使用できる基本コントロール クラスのコンテンツ モデルがコントロール シナリオに適していない場合を除き、このレベルで論理ツリーを操作することは推奨されません。 のItemsControlレベルContentControlでサブクラス化することを検討してくださいHeaderedItemsControl。 これらのクラスは、専用 API を介した論理ツリー子要素の特定の適用を含むコンテンツ モデルと、テンプレートを使用したスタイル設定など、WPF コントロールで一般的に望ましいその他の機能のサポートを提供します。 使用方法 LogicalChildrenAddLogicalChild方法の詳細については、「 WPF のツリー」を参照してください。

AddLogicalChild は、論理ツリーが別のプロセスによって反復処理されているときに呼び出された場合に例外をスローする可能性があります。

適用対象

こちらもご覧ください