Udostępnij za pośrednictwem


Rehostowanie projektanta

Projektant ponowne hostowanie to typowy scenariusz, który odnosi się do hostowania kanwy projektu przepływu pracy wewnątrz aplikacji niestandardowej. Aplikacja hostingowa, z której większość osób zna program Visual Studio, jednak istnieje wiele scenariuszy, w których wyświetlanie projektanta przepływu pracy w aplikacji może być przydatne:

  • Monitorowanie aplikacji (umożliwia użytkownikowi końcowemu wizualizowanie procesu, a także danych środowiska uruchomieniowego dotyczących procesu, takich jak aktualnie aktywny stan, agregowanie danych czasu wykonywania lub inne informacje o wystąpieniu przepływu pracy).

  • Aplikacje, które umożliwiają użytkownikowi dostosowanie procesu przy użyciu ograniczonego zestawu działań.

Aby obsługiwać te typy aplikacji, projektant przepływu pracy jest dostarczany wewnątrz programu .NET Framework i może być hostowany w aplikacji WPF lub w aplikacji WinForms z odpowiednim kodem hostingu WPF. W przykładzie Projektant Rehosting pokazano:

  • Ponowne hostowanie projektanta WF.

  • Używając również ponownie hostowanego przybornika i siatki właściwości.

Ponowne hostowanie projektanta

W tym przykładzie pokazano, jak utworzyć układ WPF zawierający projektanta widoczny w poniższym układzie siatki (kod przybornika pominięty w przypadku problemów z miejscem). Zanotuj nazewnictwo obramowań, które zawierają projektanta i siatkę właściwości.

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

Następnie przykład tworzy projektanta i kojarzy jego podstawowy View i PropertyInspectorView z odpowiednim kontenerem w interfejsie użytkownika. W poniższym przykładzie istnieje kilka dodatkowych wierszy kodu, które zasługują na wyjaśnienie. Wywołanie jest wymagane do skojarzenia Register domyślnych projektantów działań dla działań dostarczanych z programem .NET Framework. Load Element jest wywoływany w celu przekazania elementu WF do edycji. Na koniec (podstawowa View kanwa) i PropertyInspectorView (siatka właściwości) są umieszczane na powierzchni interfejsu użytkownika.

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

Korzystanie z ponownie hostowanego przybornika

W tym przykładzie użyto kontrolki przybornika ponownie hostowanego deklaratywnie w języku XAML. Należy pamiętać, że w kodzie można przekazać typ do konstruktora ToolboxItemWrapper .

<!-- 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>

Korzystanie z przykładu

  1. Otwórz rozwiązanie Projektant Rehosting.sln w programie Visual Studio.

  2. Naciśnij klawisz F5, aby skompilować i uruchomić aplikację.

  3. Aplikacja WPF rozpoczyna się od ponownie hostowanego projektanta.