Sdílet prostřednictvím


Odebrání stavu zobrazení, který návrhář přidá do souboru XAML

ViewStateCleaningWriter ukázka ukazuje, jak vytvořit třídu, která je odvozena od XamlWriter a odebere stav zobrazení ze souboru XAML. Windows Workflow Designer zapisuje informace do dokumentu XAML, který se označuje jako stav zobrazení. Stav zobrazení odkazuje na informace, které jsou vyžadovány v době návrhu, například umístění rozložení, které nejsou vyžadovány za běhu. Návrhář pracovního postupu vloží tyto informace do dokumentu XAML při úpravách. Návrhář pracovního postupu zapíše stav zobrazení do souboru XAML s atributem mc:Ignorable , takže tyto informace se nenačtou při načtení souboru XAML za běhu. Tato ukázka ukazuje, jak vytvořit třídu, která při zpracování uzlů XAML odebere informace o stavu.

Diskuse

Tato ukázka ukazuje, jak vytvořit vlastní zapisovač.

Chcete-li vytvořit vlastní zapisovač XAML, vytvořte třídu, která dědí z XamlWriter. Vzhledem k tomu, že se zapisovače XAML často vnořují, je typické sledovat "vnitřní" zapisovač XAML. Tyto "vnitřní" zapisovače si lze představit jako odkaz na zbývající zásobník zapisovačů XAML, což vám umožní pracovat s více vstupními body a pak delegovat zpracování do zbytku zásobníku.

V této ukázce je několik zajímavých položek. Jednou je kontrola, jestli je položka zapsaná z oboru názvů návrháře. Všimněte si, že to také odstraní použití jiných typů z oboru názvů návrháře v pracovním postupu.

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; }

Tím se také vytvoří zásobník členů XAML, které se používají při procházení datového proudu uzlu. Zbývající práce tohoto vzorku je z velké části obsažena WriteStartMember v metodě.

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

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

    if (m_attachedPropertyDepth > 0)
    {
        return;
    }

    InnerWriter.WriteStartMember(xamlMember);
}

Následné metody pak zkontrolují, jestli jsou stále obsaženy v kontejneru stavu zobrazení, a pokud ano, vrátit a nepředávejte uzel zásobníku zapisovače.

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

    InnerWriter.WriteValue(value);
}

Pokud chcete použít vlastní zapisovač XAML, musíte ho zřetězovat v zásobníku zapisovačů XAML. Následující kód ukazuje, jak se to dá použít.

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);

Použití této ukázky

  1. V sadě Visual Studio otevřete soubor řešení ViewStateCleaningWriter.sln.

  2. Otevřete příkazový řádek a přejděte do adresáře, ve kterém je sestaven ViewStageCleaningWriter.exe.

  3. Spusťte ViewStateCleaningWriter.exe v souboru Workflow1.xaml.

    Syntaxe spustitelného souboru je znázorněna v následujícím příkladu.

    ViewStateCleaningWriter.exe [input file] [output file]
    

    Tím se vypíše soubor XAML do souboru [outfile], který má odebrané všechny informace o stavu zobrazení.

Poznámka:

Sequence Pro pracovní postup se odebere řada tipů virtualizace. Návrhář tak při příštím načtení přepočítá rozložení. Při použití této ukázky Flowchartpro , všechny informace o umístění a směrování řádků jsou odebrány a při následném načítání do návrháře jsou všechny aktivity skládané na levé straně obrazovky.

Vytvoření ukázkového souboru XAML pro použití s touto ukázkou

  1. Otevřete sadu Visual Studio.

  2. Vytvořte novou konzolovou aplikaci pracovního postupu.

  3. Přetažení několika aktivit na plátno

  4. Uložte soubor XAML pracovního postupu.

  5. Zkontrolujte soubor XAML a podívejte se na připojené vlastnosti zobrazení.