Visual.AddVisualChild(Visual) 方法

定義

定義兩個視覺項目之間的父-子關係。Defines the parent-child relationship between two visuals.

protected:
 void AddVisualChild(System::Windows::Media::Visual ^ child);
protected void AddVisualChild (System.Windows.Media.Visual child);
member this.AddVisualChild : System.Windows.Media.Visual -> unit
Protected Sub AddVisualChild (child As Visual)

參數

child
Visual

要加入至父視覺項目的子視覺物件。The child visual object to add to parent visual.

範例

下列範例顯示如何定義視覺子系的自訂儲存需求。The following example shows how to define custom storage requirements for a visual child. 這個範例會使用 AddVisualChildRemoveVisualChild 方法,來設定父視覺效果與 child之間的父子式關聯性。The example uses the AddVisualChild and RemoveVisualChild methods to sets up the parent-child relationship between the parent visual and child. 為了正確列舉視覺化樹狀結構,此範例會提供 GetVisualChild 方法的覆寫實作為,並 VisualChildrenCount 屬性。In order for the visual tree to be enumerated correctly, the example provides overridden implementations of the GetVisualChild method and VisualChildrenCount property.

注意

雖然可以使用 VisualCollection 建立視覺物件之間的父子式關聯性,但當只有一個子系連結至父系時,提供您自己的自訂存放裝置實效率會更有效率。Although it is possible to use VisualCollection to create parent-child relationships between visual objects, it is more efficient to provide your own custom storage implementation when only one child is linked to a parent.

// Create a host visual derived from the FrameworkElement class.
// This class provides layout, event handling, and container support for
// the child visual object.
public class MyVisualHost : FrameworkElement
{
    private DrawingVisual _child;

    public MyVisualHost(DrawingVisual drawingVisual)
    {
        _child = drawingVisual;
        this.AddVisualChild(_child);
    }

    public DrawingVisual Child
    {
        get
        {
            return _child;
        }

        set
        {
            if (_child != value)
            {
                this.RemoveVisualChild(_child);
                _child = value;
                this.AddVisualChild(_child);
            }
        }
    }

    // Provide a required override for the VisualChildrenCount property.
    protected override int VisualChildrenCount
    {
        get { return _child == null ? 0 : 1; }
    }

    // Provide a required override for the GetVisualChild method.
    protected override Visual GetVisualChild(int index)
    {
        if (_child == null)
        {
            throw new ArgumentOutOfRangeException();
        }

        return _child;
    }
' Create a host visual derived from the FrameworkElement class.
' This class provides layout, event handling, and container support for
' the child visual object.
Public Class MyVisualHost
    Inherits FrameworkElement
    Private _child As DrawingVisual

    Public Sub New(ByVal drawingVisual As DrawingVisual)
        _child = drawingVisual
        Me.AddVisualChild(_child)
    End Sub

    Public Property Child() As DrawingVisual
        Get
            Return _child
        End Get

        Set(ByVal value As DrawingVisual)
            If _child IsNot value Then
                Me.RemoveVisualChild(_child)
                _child = value
                Me.AddVisualChild(_child)
            End If
        End Set
    End Property

    ' Provide a required override for the VisualChildrenCount property.
    Protected Overrides ReadOnly Property VisualChildrenCount() As Integer
        Get
            Return If(_child Is Nothing, 0, 1)
        End Get
    End Property

    ' Provide a required override for the GetVisualChild method.
    Protected Overrides Function GetVisualChild(ByVal index As Integer) As Visual
        If _child Is Nothing Then
            Throw New ArgumentOutOfRangeException()
        End If

        Return _child
    End Function

備註

AddVisualChild 方法會設定兩個視覺物件之間的父子式關聯性。The AddVisualChild method sets up the parent-child relationship between two visual objects. 當您需要對視覺子物件的基礎儲存區執行進行較高層級的控制時,必須使用此方法。This method must be used when you need greater low-level control over the underlying storage implementation of visual child objects. VisualCollection 可用來做為儲存子物件的預設執行。VisualCollection can be used as a default implementation for storing child objects.

適用於

另請參閱