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
V sadě Visual Studio otevřete soubor řešení ViewStateCleaningWriter.sln.
Otevřete příkazový řádek a přejděte do adresáře, ve kterém je sestaven ViewStageCleaningWriter.exe.
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
Otevřete sadu Visual Studio.
Vytvořte novou konzolovou aplikaci pracovního postupu.
Přetažení několika aktivit na plátno
Uložte soubor XAML pracovního postupu.
Zkontrolujte soubor XAML a podívejte se na připojené vlastnosti zobrazení.