Designer opnieuw hosten
Designer opnieuw hosten is een veelvoorkomend scenario dat verwijst naar het hosten van het canvas voor werkstroomontwerp in een aangepaste toepassing. De hostingtoepassing waarmee de meeste mensen bekend zijn, is Visual Studio, maar er zijn een aantal scenario's waarin de werkstroomontwerper in een toepassing kan worden weergegeven:
Toepassingen bewaken (zodat een eindgebruiker het proces kan visualiseren, evenals runtimegegevens over het proces, zoals de huidige actieve status, cumulatieve uitvoeringstijdgegevens of andere informatie over een exemplaar van de werkstroom).
Toepassingen waarmee een gebruiker het proces kan aanpassen met een beperkte set activiteiten.
Ter ondersteuning van deze typen toepassingen wordt de werkstroomontwerper geleverd in het .NET Framework en kan deze worden gehost in een WPF-toepassing of in een WinForms-toepassing met de juiste WPF-hostingcode. In het voorbeeld DesignerRehosting ziet u het volgende:
De WF-ontwerper opnieuw hosten.
Het opnieuw gehoste werkset en eigenschappenraster gebruiken.
De ontwerpfunctie opnieuw hosten
In dit voorbeeld ziet u hoe u de WPF-indeling maakt die de ontwerpfunctie bevat, te zien in de volgende rasterindeling (werksetcode weggelaten voor ruimteproblemen). Let op de naamgeving van de randen die de ontwerpfunctie en het eigenschappenraster bevatten.
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="2*"/>
<ColumnDefinition Width="7*"/>
<ColumnDefinition Width="3*"/>
</Grid.ColumnDefinitions>
<Border Grid.Column="0">
<sapt:ToolboxControl>...</sapt:ToolboxControl>
</Border>
<Border Grid.Column="1" Name="DesignerBorder"/>
<Border Grid.Column="2" Name="PropertyBorder"/>
</Grid>
Vervolgens maakt u de ontwerpfunctie en koppelt u de primaire View en PropertyInspectorView de juiste container in de gebruikersinterface. Er zijn enkele extra regels code in het volgende voorbeeld die enige uitleg verdienen. De Register aanroep is vereist om de standaardactiviteitontwerpers te koppelen aan de activiteiten die worden verzonden met .NET Framework. Load wordt aangeroepen om het WF-item door te geven dat moet worden bewerkt. Ten slotte worden het View (primaire canvas) en PropertyInspectorView (eigenschappenraster) op het gebruikersinterfaceoppervlak geplaatst.
protected override void OnInitialized(EventArgs e)
{
base.OnInitialized(e);
// register metadata
(new DesignerMetadata()).Register();
// create the workflow designer
WorkflowDesigner wd = new WorkflowDesigner();
wd.Load(new Sequence());
DesignerBorder.Child = wd.View;
PropertyBorder.Child = wd.PropertyInspectorView;
}
De opnieuw gehoste werkset gebruiken
In dit voorbeeld wordt het opnieuw gehoste werksetbeheer declaratief gebruikt in XAML. Houd er rekening mee dat u in code een type aan de ToolboxItemWrapper constructor kunt doorgeven.
<!-- Copyright (c) Microsoft Corporation. All rights reserved-->
<Window x:Class="Microsoft.Samples.DesignerRehosting.RehostingWfDesigner"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:sapt="clr-namespace:System.Activities.Presentation.Toolbox;assembly=System.Activities.Presentation"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
Title="Window1" Height="600" Width="900">
<Window.Resources>
<sys:String x:Key="AssemblyName">System.Activities, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35</sys:String>
</Window.Resources>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="2*"/>
<ColumnDefinition Width="7*"/>
<ColumnDefinition Width="3*"/>
</Grid.ColumnDefinitions>
<Border Grid.Column="0">
<sapt:ToolboxControl>
<sapt:ToolboxCategory CategoryName="Basic">
<sapt:ToolboxItemWrapper AssemblyName="{StaticResource AssemblyName}" >
<sapt:ToolboxItemWrapper.ToolName>
System.Activities.Statements.Sequence
</sapt:ToolboxItemWrapper.ToolName>
</sapt:ToolboxItemWrapper>
<sapt:ToolboxItemWrapper AssemblyName="{StaticResource AssemblyName}">
<sapt:ToolboxItemWrapper.ToolName>
System.Activities.Statements.WriteLine
</sapt:ToolboxItemWrapper.ToolName>
</sapt:ToolboxItemWrapper>
<sapt:ToolboxItemWrapper AssemblyName="{StaticResource AssemblyName}">
<sapt:ToolboxItemWrapper.ToolName>
System.Activities.Statements.If
</sapt:ToolboxItemWrapper.ToolName>
</sapt:ToolboxItemWrapper>
<sapt:ToolboxItemWrapper AssemblyName="{StaticResource AssemblyName}">
<sapt:ToolboxItemWrapper.ToolName>
System.Activities.Statements.While
</sapt:ToolboxItemWrapper.ToolName>
</sapt:ToolboxItemWrapper>
</sapt:ToolboxCategory>
</sapt:ToolboxControl>
</Border>
<Border Grid.Column="1" Name="DesignerBorder"/>
<Border Grid.Column="2" Name="PropertyBorder"/>
</Grid>
</Window>
Het voorbeeld gebruiken
Open de DesignerRehosting.sln-oplossing in Visual Studio.
Druk op F5 om de toepassing te compileren en uit te voeren.
Een WPF-toepassing begint met een opnieuw gehoste ontwerper.