Freigeben über


ContextNode.CreatePartiallyPopulatedSubNode-Methode

Erstellt ein untergeordnetes ContextNode-Objekt, das nur die folgenden Informationen enthält: Type, Id und Location.

Namespace:  System.Windows.Ink
Assembly:  IAWinFX (in IAWinFX.dll)

Syntax

'Declaration
Public Function CreatePartiallyPopulatedSubNode ( _
    type As Guid, _
    nodeId As Guid, _
    nodeLocation As AnalysisRegion _
) As ContextNode
'Usage
Dim instance As ContextNode
Dim type As Guid
Dim nodeId As Guid
Dim nodeLocation As AnalysisRegion
Dim returnValue As ContextNode

returnValue = instance.CreatePartiallyPopulatedSubNode(type, _
    nodeId, nodeLocation)
public ContextNode CreatePartiallyPopulatedSubNode(
    Guid type,
    Guid nodeId,
    AnalysisRegion nodeLocation
)
public:
ContextNode^ CreatePartiallyPopulatedSubNode(
    Guid type, 
    Guid nodeId, 
    AnalysisRegion^ nodeLocation
)
public ContextNode CreatePartiallyPopulatedSubNode(
    Guid type,
    Guid nodeId,
    AnalysisRegion nodeLocation
)
public function CreatePartiallyPopulatedSubNode(
    type : Guid, 
    nodeId : Guid, 
    nodeLocation : AnalysisRegion
) : ContextNode

Parameter

  • nodeId
    Typ: System.Guid
    Der Bezeichner für den neuen Knoten.

Rückgabewert

Typ: System.Windows.Ink.ContextNode
Ein neues ContextNode-Objekt, das nur Informationen überType, Id und Location enthält. Dieser neue Knoten ist dem ContextNode untergeordnet.

Hinweise

Diese Methode wird für ein Datenproxy verwendet, um ein ContextNode-Objekt in der Kontextknotenstruktur zu erstellen, bevor alle relevanten Informationen zur Verfügung stehen. Die anderen Informationen können später hinzugefügt werden.

Beispiele

Das folgende Beispiel ist eine Methode mit dem Namen CreatePartiallyPopulatedNode, die eine [System.Windows.Controls.TreeView] als Dokumentmodell verwendet, um anzuzeigen, wie ein Datenproxy zum Speichern und Laden einer Kontextknotenstruktur für einen InkAnalyzer verwendet werden kann. Die DocumentNodeData-Klasse speichert ContextNode Daten im Dokumentmodell, indem sie die [System.Windows.FrameworkElement.Tag]-Eigenschaft jedes TreeViewItem-Objekts auf ein DocumentNodeData-Objekt festlegt. Die CreatePartiallyPopulatedNode-Methode verwendet ein TreeViewItem-Objekt und ein InkAnalyzer-Objekt, um die teilweise aufgefüllten Knoten in der InkAnalyzer-Kontextknotenstruktur zu erstellen, die mit dem TreeViewItem im Dokumentmodell übereinstimmen. In diesem Beispiel werden alle Knoten als teilweise aufgefüllt erstellt. Dann werden sie in eine Warteschlange von Knoten platziert, die zu einem späteren Zeitpunkt komplett mit den Knotendaten aufgefüllt wird.

Die Methode ruft die Knotendaten von der [System.Windows.FrameworkElement.Tag]-Eigenschaft des TreeViewItem-Objekts, das übergeben wird, ab. Die Methode verwendet dann den Id, um zu sicherzustellen, dass der Knoten aktuell nicht Teil der Kontextknotenstruktur ist. Sie verwendet die Strukturansicht des übergeordneten Knotens, um den entsprechenden übergeordneten Knoten in InkAnalyzer zu finden. Wenn der übergeordnete Knoten noch nicht in der Kontextknotenstruktur vorhanden ist, wird er mithilfe der Rekursion hinzugefügt. Wenn der übergeordnete Knoten in der Struktur enthalten ist, sollte er teilweise aufgefüllt sein; wenn er vollständig aufgefüllt wäre, würde er bereits alle untergeordneten Knoten enthalten, und es wäre nicht erforderlich, einen neuen hinzuzufügen. Daher überprüft die PartiallyPopulated-Eigenschaft, dass der übergeordnete Knoten teilweise aufgefüllt ist. In diesem Fall wird er der Warteschlange hinzugefügt, um zu einem späteren Zeitpunkt vollständig aufgefüllt zu werden. Wenn er nicht teilweise aufgefüllt ist, wird eine Ausnahme ausgelöst. Schließlich wird [M:System.Windows.Ink.ContextNode.CreatePartiallyPopulatedSubNode (System.Windows.Ink.ContextNodeType,System.Guid,System.Windows.Ink.AnalysisRegion)] auf dem übergeordneten Knoten aufgerufen, und der neu erstellte Knoten wird der Warteschlange mit Knoten hinzugefügt, die vollständig aufgefüllt werden. Das neue ContextNode-Objekt wird zurückgegeben. Weitere Informationen zu Datenproxys finden Sie unter Data Proxy with Ink Analysis.

Private Function CreatePartiallyPopulatedNode(ByVal documentNode As TreeViewItem, ByVal theInkAnalyzer As InkAnalyzer) As ContextNode

    Dim nodeData As DocumentNodeData = documentNode.Tag '

    ' Check that the node does not already exist in the InkAnalyzer.
    If Nothing <> theInkAnalyzer.FindNode(nodeData.Id) Then
        Throw New ApplicationException("The node already exists in the InkAnalyzer.")
    End If

    ' Find the parent analyzer node.
    Dim parentNode As TreeViewItem = documentNode.Parent '

    If parentNode Is Nothing Then
        Throw New Exception("parentNode is not a TreeViewItem")
    End If

    Dim parentNodeData As DocumentNodeData = parentNode.Tag
    Dim analyzerParentNode As ContextNode = theInkAnalyzer.FindNode(parentNodeData.Id)

    If Nothing = analyzerParentNode Then
        ' The parent analyzer node does not exist yet. Create one.
        analyzerParentNode = Me.CreatePartiallyPopulatedNode(parentNode, theInkAnalyzer)
    ElseIf analyzerParentNode.PartiallyPopulated Then
        ' The parent analyzer node exists and is partially populated. Add it
        ' to the stack of nodes to fully populate.
        Me.QueueNodeToPopulate(analyzerParentNode)
    Else
        ' The parent analyzer node exists and is fully populated. This
        ' should not happen.
        Throw New ApplicationException("The parent analyzer node is fully populated.")
    End If

    ' Create the partially populated node under its parent analyzer node.
    Dim analyzerNode As ContextNode = analyzerParentNode.CreatePartiallyPopulatedSubNode(nodeData.Type, nodeData.Id, nodeData.Location)

    ' Add the new node to the stack of nodes to fully populate.
    Me.QueueNodeToPopulate(analyzerNode)

    Return analyzerNode

End Function 'CreatePartiallyPopulatedNode
        private ContextNode CreatePartiallyPopulatedNode(
            TreeViewItem documentNode, InkAnalyzer theInkAnalyzer)
        {
            DocumentNodeData nodeData = documentNode.Tag as DocumentNodeData;

            // Check that the node does not already exist in the InkAnalyzer.
            if (null != theInkAnalyzer.FindNode(nodeData.Id))
            {
                throw new ApplicationException(
                    "The node already exists in the InkAnalyzer.");
            }

            // Find the parent analyzer node.
            TreeViewItem parentNode = documentNode.Parent as TreeViewItem;

            if (parentNode == null)
            {
                throw new Exception("parentNode is not a TreeViewItem");
            }

            DocumentNodeData parentNodeData =
                parentNode.Tag as DocumentNodeData;
            ContextNode analyzerParentNode =
                theInkAnalyzer.FindNode(parentNodeData.Id);
            if (null == analyzerParentNode)
            {
                // The parent analyzer node does not exist yet. Create one.
                analyzerParentNode =
                    this.CreatePartiallyPopulatedNode(
                        parentNode, theInkAnalyzer);
            }
            else if (analyzerParentNode.PartiallyPopulated)
            {
                // The parent analyzer node exists and is partially populated. Add it
                // to the stack of nodes to fully populate.
                this.QueueNodeToPopulate(analyzerParentNode);
            }
            else
            {
                // The parent analyzer node exists and is fully populated. This
                // should not happen.
                throw new ApplicationException(
                    "The parent analyzer node is fully populated.");
            }

            // Create the partially populated node under its parent analyzer node.
            ContextNode analyzerNode =
                analyzerParentNode.CreatePartiallyPopulatedSubNode(
                    nodeData.Type, nodeData.Id, nodeData.Location);

            // Add the new node to the stack of nodes to fully populate.
            this.QueueNodeToPopulate(analyzerNode);

            return analyzerNode;
        }

Plattformen

Windows Vista

.NET Framework und .NET Compact Framework unterstützen nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen für .NET Framework.

Versionsinformationen

.NET Framework

Unterstützt in: 3.0

Siehe auch

Referenz

ContextNode-Klasse

ContextNode-Member

System.Windows.Ink-Namespace

ContextNode.PartiallyPopulated