Share via


FrameworkElement.AddLogicalChild(Object) Metode

Definisi

Menambahkan objek yang disediakan ke pohon logis elemen ini.

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)

Parameter

child
Object

Elemen anak yang akan ditambahkan.

Contoh

Contoh berikut mengimplementasikan Child properti pada kustom FrameworkElement yang melakukan implementasi lapisan visualnya sendiri. Setter properti dirancang sehingga jika nilai berubah, nilai lama dihapus dari pohon logis, serta koleksi visual khusus kelas. Nilai properti di-cache, lalu nilai baru ditambahkan ke pohon logis dan koleksi visual kustom.

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

Keterangan

Gunakan metode ini untuk implementasi koleksi pada objek yang mewakili elemen anak logis dari elemen . Pemeliharaan pengumpulan untuk koleksi elemen anak mungkin dilakukan di getter atau setter properti, penanganan kelas peristiwa yang diubah, konstruktor, atau dalam jenis koleksi itu sendiri.

Untuk penulis kontrol, memanipulasi pohon logis pada tingkat ini bukanlah praktik yang direkomendasikan, kecuali tidak ada model konten untuk kelas kontrol dasar yang tersedia yang sesuai untuk skenario kontrol Anda. Pertimbangkan subkelas pada tingkat ContentControl, , ItemsControldan HeaderedItemsControl. Kelas-kelas ini menyediakan model konten dengan penegakan khusus elemen anak pohon logis melalui API khusus, serta dukungan untuk fitur lain yang biasanya diinginkan dalam kontrol WPF seperti menata melalui templat. Untuk informasi selengkapnya tentang cara menggunakan LogicalChildren dan AddLogicalChild, lihat Pohon di WPF.

AddLogicalChild dapat melemparkan pengecualian jika dipanggil pada saat pohon logis sedang di-iterasi oleh proses lain.

Berlaku untuk

Lihat juga