Rimozione dello stato di visualizzazione della finestra di progettazione per l'aggiunta a un file XAMLRemoving the View State the Designer Adds to an XAML File

In questo esempio viene illustrato come creare una classe che deriva da XamlWriter e rimuove lo stato di visualizzazione da un file XAML.This sample demonstrates how to create a class that derives from XamlWriter and removes view state from a XAML file. Progettazione flussi di lavoro di Windows.Windows Workflow Designer scrive informazioni nel documento XAML, che è noto come stato di visualizzazione. writes information into the XAML document, which is known as view state. Lo stato di visualizzazione si riferisce alle informazioni richieste in fase di progettazione, ad esempio il posizionamento del layout, che non sono richieste in fase di esecuzione.View state refers to the information that is required at design time, such as layout positioning, that is not required at runtime. Progettazione flussi di lavoroWorkflow Designer inserisce queste informazioni nel documento XAML man mano che viene modificato. inserts this information into the XAML document as it is edited. Progettazione flussi di lavoroWorkflow Designer scrive lo stato di visualizzazione nel file XAML con un attributo mc:Ignorable, in modo che queste informazioni non vengano caricate quando il runtime carica il file XAML. writes the view state into the XAML file with the mc:Ignorable attribute, so this information is not loaded when the runtime loads the XAML file. In questo esempio viene illustrato come creare una classe che rimuove tali informazioni sullo stato di visualizzazione durante l'elaborazione di nodi XAML.This sample demonstrates how to create a class that removes that view state information while processing XAML nodes.

DiscussioneDiscussion

In questo esempio viene illustrato come creare un writer personalizzato.This sample demonstrates how to create a custom writer.

Per compilare un writer XAML personalizzato, creare una classe che eredita da XamlWriter.To build a custom XAML writer, create a class that inherits from XamlWriter. I writer XAML sono spesso annidati, è tipico tenere traccia di un writer XAML "interno".As XAML writers are often nested, it is typical to keep track of an "inner" XAML writer. Questi "interna ' writer possono essere considerati come riferimento allo stack restante di writer XAML, consentendo di disporre di più punti di ingresso per eseguire le operazioni e delegare quindi l'elaborazione al resto dello stack.These "inner’ writers can be thought of as the reference to the remaining stack of XAML writers, allowing you to have multiple entry points to do work and then delegate processing to the remainder of the stack.

In questo esempio sono presenti alcuni elementi di interesse.In this sample, there are a few items of interest. Uno consiste nel verificare se l'elemento scritto proviene da uno spazio dei nomi della finestra di progettazione.One is the check to see whether the item being written is from a designer namespace. Si noti che consente di rimuovere anche l'uso di altri tipi dallo spazio dei nomi della finestra di progettazione in un flusso di lavoro.Note that this also strips out the use of other types from the designer namespace in a workflow.

static Boolean IsDesignerAttachedProperty(XamlMember xamlMember)  
{  
    return xamlMember.IsAttachable &&  
        xamlMember.PreferredXamlNamespace.Equals(c_sapNamespaceURI, StringComparison.OrdinalIgnoreCase);  
}  

const String c_sapNamespaceURI = "http://schemas.microsoft.com/netfx/2009/xaml/activities/presentation";  

// The next item of interest is the constructor, where the utilization of the inner XAML writer is seen.  
public ViewStateCleaningWriter(XamlWriter innerWriter)  
{  
    this.InnerWriter = innerWriter;  
    this.MemberStack = new Stack<XamlMember>();  
}  

XamlWriter InnerWriter {get; set; }  
Stack<XamlMember> MemberStack {get; set; }  

Inoltre, crea uno stack di membri XAML usati mentre si attraversa il flusso del nodo.This also creates a stack of XAML members that are used while traversing the node stream. Il lavoro rimanente di questo esempio è ampiamente contenuto nel System.Windows.Markup.XamlWriter.WriteStartMember metodo.The remaining work of this sample is largely contained in the System.Windows.Markup.XamlWriter.WriteStartMember method.

public override void WriteStartMember(XamlMember xamlMember)  
{  
    MemberStack.Push(xamlMember);

    if (IsDesignerAttachedProperty(xamlMember))  
    {  
        m_attachedPropertyDepth++;  
    }  

    if (m_attachedPropertyDepth > 0)  
    {  
        return;  
    }  

    InnerWriter.WriteStartMember(xamlMember);  
}  

Metodi successivi consentono quindi di verificare se sono ancora contenuti in un contenitore dello stato di visualizzazione e, in tal caso, restituire, e non passare, il nodo dello stack del writer.Subsequent methods then check to see whether they are still contained in a view state container, and if so, return, and do not pass the node down the writer stack.

public override void WriteValue(Object value)  
{  
    if (m_attachedPropertyDepth > 0)  
    {  
        return;  
    }  

    InnerWriter.WriteValue(value);  
}  

Per usare un writer XAML personalizzato, è necessario concatenarlo insieme in uno stack di writer XAML.To use a custom XAML writer, you must chain it together in a stack of XAML writers. Nel seguente esempio di codice viene mostrato come questo possa essere usato.The following code shows how this can be used.

XmlWriterSettings writerSettings = new XmlWriterSettings {  Indent = true };  
XmlWriter xmlWriter = XmlWriter.Create(File.OpenWrite(args[1]), writerSettings);  
XamlXmlWriter xamlWriter = new XamlXmlWriter(xmlWriter, new XamlSchemaContext());  
XamlServices.Save(new ViewStateCleaningWriter(ActivityXamlServices.CreateBuilderWriter(xamlWriter)), ab);  

Per usare questo esempioTo use this sample

  1. In Visual Studio 2010Visual Studio 2010 aprire il file della soluzione ViewStateCleaningWriter.sln.Using Visual Studio 2010Visual Studio 2010, open the ViewStateCleaningWriter.sln solution file.

  2. Aprire un prompt dei comandi e passare alla directory in cui viene compilato ViewStageCleaningWriter.exe.Open a command prompt and navigate to the directory where the ViewStageCleaningWriter.exe is built.

  3. Eseguire ViewStateCleaningWriter.exe nel file Workflow1.xaml.Run ViewStateCleaningWriter.exe on the Workflow1.xaml file.

    La sintassi per il file eseguibile viene mostrata nell'esempio seguente.The syntax for the executable is shown in the following example.

    ViewStateCleaningWriter.exe [input file] [output file]
    

    Restituisce un file XAML in [outfile], che contiene tutte le informazioni sullo stato di visualizzazione rimosse.This outputs a XAML file to [outfile], which has all its view state information removed.

Nota

Per un flusso di lavoro Sequence, vengono rimossi diversi suggerimenti di virtualizzazioneFor a Sequence workflow, a number of virtualization hints are removed. determinando così il ricalcolo del layout da parte della finestra di progettazione al successivo caricamento.This causes the designer to recalculate layout the next time it is loaded. Quando si usa questo esempio per un oggetto Flowchart, tutte le informazioni relative al posizionamento e al routing linea vengono rimosse e, al successivo caricamento nella finestra di progettazione, tutte le attività sono in pila sul lato sinistro dello schermo.When you use this sample for a Flowchart, all positioning and line routing information are removed and on subsequent loading into the designer, all activities are stacked on the left side of the screen.

Per creare un file XAML di esempio da usare con questo esempioTo create a sample XAML file for use with this sample

  1. Aprire Visual Studio 2010Visual Studio 2010.Open Visual Studio 2010Visual Studio 2010.

  2. Creare una nuova applicazione console flusso di lavoro.Create a new Workflow Console Application.

  3. Trascinare alcune attività sull'area di disegnoDrag and drop a few activities onto the canvas

  4. Salvare il file XAML del flusso di lavoro.Save the workflow XAML file.

  5. Esaminare il file XAML per visualizzare le proprietà collegate dello stato di visualizzazione.Inspect the XAML file to see the view state attached properties.

Importante

È possibile che gli esempi siano già installati nel computer.The samples may already be installed on your machine. Verificare la directory seguente (impostazione predefinita) prima di continuare.Check for the following (default) directory before continuing.

<InstallDrive>:\WF_WCF_Samples

Se questa directory non esiste, andare al Windows Communication Foundation (WCF) e gli esempi di Windows Workflow Foundation (WF) per .NET Framework 4 per scaricare tutti i Windows Communication Foundation (WCF) e WFWF esempi.If this directory does not exist, go to Windows Communication Foundation (WCF) and Windows Workflow Foundation (WF) Samples for .NET Framework 4 to download all Windows Communication Foundation (WCF) and WFWF samples. Questo esempio si trova nella directory seguente.This sample is located in the following directory.

<InstallDrive>:\WF_WCF_Samples\WF\Basic\Designer\ViewStateCleaningWriter