Condividi tramite


Metodo ContextNode.CreatePartiallyPopulatedSubNode

Aggiornamento: novembre 2007

Crea un oggetto ContextNode figlio che contiene solo le informazioni seguenti: Type, Id e Location.

Spazio dei nomi:  System.Windows.Ink
Assembly:  IAWinFX (in IAWinFX.dll)

Sintassi

'Dichiarazione
Public Function CreatePartiallyPopulatedSubNode ( _
    type As Guid, _
    nodeId As Guid, _
    nodeLocation As AnalysisRegion _
) As ContextNode
'Utilizzo
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

Parametri

  • nodeId
    Tipo: System.Guid
    Identificatore del nuovo nodo.

Valore restituito

Tipo: System.Windows.Ink.ContextNode
Nuovo oggetto ContextNode contenente solo le informazioni relative a Type, Id e Location. Questo nuovo nodo è figlio di ContextNode.

Note

Questo metodo viene utilizzato per il proxy di dati e consente di creare un oggetto ContextNode nella struttura ad albero del nodo di contesto prima che siano disponibili tutte le informazioni pertinenti. Le altre informazioni possono essere aggiunte in un momento successivo.

Esempi

Nell'esempio seguente viene illustrato un metodo denominato CreatePartiallyPopulatedNode, che utilizza un oggetto [System.Windows.Controls.TreeView] come modello di documento per mostrare come il proxy di dati può essere utilizzato per archiviare e caricare una struttura ad albero del nodo di contesto per un oggetto InkAnalyzer. La classe DocumentNodeData archivia i dati di ContextNode nel modello di documento impostando la proprietà [System.Windows.FrameworkElement.Tag] di ogni oggetto TreeViewItem su un oggetto DocumentNodeData. Il metodo CreatePartiallyPopulatedNode utilizza un oggetto TreeViewItem e un oggetto InkAnalyzer per creare il nodo parzialmente popolato nella struttura ad albero del nodo di contesto di InkAnalyzer corrispondente all'oggetto TreeViewItem nel modello di documento. In questo esempio, tutti i nodi vengono creati come parzialmente popolati. Quindi, vengono posizionati in una coda di nodi che viene popolata completamente con i dati dei nodi in un momento successivo.

Il metodo ottiene i dati del nodo dalla proprietà [System.Windows.FrameworkElement.Tag] dell'oggetto TreeViewItem passato. Quindi, il metodo utilizza l'elemento Id per verificare che il nodo non sia attualmente nella struttura ad albero del nodo di contesto e utilizza il nodo padre della visualizzazione struttura ad albero per trovare il nodo padre corrispondente nell'oggetto InkAnalyzer. Se il nodo padre ancora non è presente nella struttura ad albero del nodo di contesto, viene aggiunto tramite la ricorsione. Se invece è presente nella struttura ad albero, il nodo padre deve essere popolato parzialmente. Se fosse popolato completamente, già conterrebbe tutti i sottonodi e non ci sarebbe alcun bisogno di aggiungerne uno nuovo. Pertanto, la proprietà PartiallyPopulated verifica che il nodo padre sia popolato parzialmente e, in tal caso, il nodo padre viene aggiunto a una coda e viene popolato completamente in un momento successivo. Se il nodo non è popolato parzialmente, viene generata un'eccezione. Infine, viene chiamato il metodo [M:System.Windows.Ink.ContextNode.CreatePartiallyPopulatedSubNode (System.Windows.Ink.ContextNodeType,System.Guid,System.Windows.Ink.AnalysisRegion)] sul nodo padre e il nodo appena creato viene aggiunto alla coda dei nodi da popolare completamente. Il nuovo oggetto ContextNode viene restituito. Per ulteriori informazioni sul proxy di dati, vedere 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;
        }

Piattaforme

Windows Vista

.NET Framework e .NET Compact Framework non supportano tutte le versioni di ciascuna piattaforma. Per un elenco delle versioni supportate, vedere Requisiti di sistema di .NET Framework.

Informazioni sulla versione

.NET Framework

Supportato in: 3.0

Vedere anche

Riferimenti

ContextNode Classe

Membri ContextNode

Spazio dei nomi System.Windows.Ink

ContextNode.PartiallyPopulated