Udostępnij za pośrednictwem


Dostosowywanie narzędzi i przybornika

Należy zdefiniować elementy przybornika dla elementów, które chcesz zezwolić użytkownikom na wprowadzanie do ich modeli.Istnieją dwa rodzaje narzędzia: narzędzia element i połączenia.W projektancie generowanych użytkownika można wybrać narzędzie element, przeciągnij kształty do diagramu i można wybrać narzędzie połączenia, aby narysować łącza między kształtami.Ogólnie rzecz biorąc element narzędzia pozwalają użytkownikom dodawanie wystąpienia klas domeny do ich modeli i narzędzia połączenia pozwalają je dodać wystąpień relacje między domenami.

W tym temacie:

  • Modyfikowanie karty przybornika

  • Element narzędzia

  • Tworzenie grup elementów z narzędziem

  • Narzędzia połączeń

  • Zmiana kolejności elementów z przybornika

Sposób definiowania przybornika

W Eksploratorze DSL rozwiń węzeł Edytor i węzłów znajdujących się pod nim.Zazwyczaj będzie Zobacz hierarchii, podobny do tego:

Editor
     Toobox Tabs
        MyDsl          //a tab
           Tools
               ExampleElement      // an element tool
               ExampleRelationship // a connection tool

W tej części DSL Explorer można:

  • Utwórz nowe karty.Karty należy zdefiniować nagłówki sekcji w przyborniku.

  • Tworzenie nowych narzędzi.

  • Kopiowanie i wklejanie narzędzia.

  • Przenoszenie narzędzia w górę lub w dół na liście.

  • Usuwanie karty i narzędzia.

Ważna uwagaWażne

Aby dodać lub wklejać elementy w Eksploratorze DSL, kliknij prawym przyciskiem myszy pokolenia nowego węzła.Na przykład, aby dodać narzędzie, prawym przyciskiem myszy kartę, a nie Narzędzia węzła.Aby dodać kartę, kliknij prawym przyciskiem myszy edytora węzła.

Ikonę przybornika właściwości każdego narzędzia odwołuje się do pliku mapy bitowej 16 x 16.Pliki te są zwykle przechowywane w Dsl\Resources folder.

Klasy właściwość narzędzie element odnosi się do klasy konkretnych domeny.Domyślnie narzędzie utworzy wystąpienia tej klasy.Można jednak napisać kod, aby narzędzie do tworzenia grup elementów lub elementów różnych typów.

Połączenie konstruktora właściwość narzędzie połączenia odwołuje się do konstruktora połączenia, która określa, jakie typy elementów można połączyć narzędzie i jakie relacje tworzy między nimi.Konstruktorzy połączenia są zdefiniowane jako węzły w Eksploratorze DSL.Konstruktorzy połączenia są tworzone automatycznie podczas definiowania relacji domeny, ale można napisać kod, aby dostosować je.

Aby dodać narzędzie do przybornika

  1. Po utworzeniu klasy shape i mapowane go do klasy domeny zwykle utworzyć narzędzie elementu.

    Po utworzeniu klasy łącznika i mapowane go do relacji odniesienia zwykle utworzyć narzędzia Łącznik.

  2. W Eksploratorze DSL, rozwiń węzeł edytora węzeł i Karty przybornik węzła.

    Kliknij prawym przyciskiem myszy węzeł karta przybornika, a następnie kliknij przycisk Dodać nowe narzędzie elementu lub Dodać nowe narzędzie połączenia.

  3. Ustaw Ikonę przybornika właściwość, aby odwołać się do mapy bitowej 16 x 16.

    Jeśli chcesz zdefiniować nową ikonę Utwórz plik mapy bitowej w oknie Solution Explorer, w Dsl\Resources folder.Plik powinien mieć następujące wartości właściwości: Build Action = zawartości; Kopiowanie do danych wyjściowych katalogu = nie należy kopiować.

  4. Dla narzędzia element: Set klasy właściwość narzędzie do odwoływania się do klasy konkretnych domeny, który jest mapowany do kształtu.

    Dla narzędzia Łącznik: Set Połączenie konstruktora właściwość narzędzie do jednego z elementów, które są oferowane na liście rozwijanej.Konstruktorzy połączenia są tworzone automatycznie podczas mapowania łącznika do relacji domeny.Jeśli niedawno utworzono łącznika, byłyby normalnie wybierz konstruktora skojarzonych z połączeniami.

  5. Aby przetestować modem DSL, naciśnij klawisz F5 lub CTRL + F5 i w instancji doświadczalnych Visual Studio, otwórz plik modelu próbki.Nowe narzędzie powinien pojawić się w przyborniku.Przeciągnij go na diagram, aby zweryfikować, że tworzy nowy element.

    Jeśli narzędzie nie jest wyświetlany, Zatrzymaj doświadczalny Visual Studio.W systemie Windows uruchomić menu Uruchom zresetować instancji doświadczalnych Microsoft Visual Studio 2010.Na Visual Studiobudować menu, kliknij przycisk Roztwór odbudować.Następnie ponownie przetestować modem DSL.

Dostosowywanie narzędzia elementu

Domyślnie narzędzie utworzy jedno wystąpienie określonej klasy, ale można zmieniać to na dwa sposoby:

  • Zdefiniuj dyrektyw scalić elementu na innych klas, umożliwiając im do akceptowania nowych wystąpień tej klasy i umożliwiające tworzenie dodatkowych łączy, podczas tworzenia nowego elementu.Można na przykład użytkownikowi drop komentarz na inny element i tym samym utworzyć łącze odwołanie między tymi dwoma.

    Te modyfikacje również wpływać na, co się dzieje, gdy użytkownik wkleja lub przeciągnie i obniży się element.

    Aby uzyskać więcej informacji, zobacz Dostosowywanie tworzenia elementu i przepływu.

  • Pisanie kodu, aby dostosować narzędzia, dzięki czemu można utworzyć grupy elementów.Narzędzie jest inicjowana za pomocą metod w ToolboxHelper.cs, który można zastąpić.Aby uzyskać więcej informacji, zobacz Tworzenie grup z elementów z narzędziem.

Bb126279.collapse_all(pl-pl,VS.110).gifTworzenie grup elementów z narzędziem

Narzędzie każdy element zawiera prototyp elementy, które należy go utworzyć.Domyślnie każdy element narzędzie tworzy pojedynczy element, ale jest również możliwe utworzenie grupy obiekty powiązane z jednego narzędzia.Aby to zrobić, należy zainicjować narzędzia z ElementGroupPrototype zawierający elementy pokrewne.

Poniższy przykład pobiera się z modemu DSL, w którym jest typu Tranzystor.Tranzystor każdy ma trzy terminale nazwane.Narzędzie elementu dla tranzystory przechowuje prototyp, zawierający cztery elementy modelu i trzy łącza relacji.Gdy użytkownik przeciągnie narzędzie na diagram, prototyp jest tworzone wystąpienia i połączone z głównym modelu.

Ten kod przesłania metodę, która jest zdefiniowana w Dsl\GeneratedCode\ToolboxHelper.cs.

Aby uzyskać więcej informacji na temat dostosowywania modelu przy użyciu kodu programu, zobacz Przeglądanie i aktualizowanie modelu w kod programu.

using Microsoft.VisualStudio.Modeling;
using Microsoft.VisualStudio.Modeling.Diagrams;

  public partial class CircuitsToolboxHelper
  {
    /// <summary>
    /// Toolbox initialization, called for each element tool on the toolbox.
    /// This version deals with each Component subtype separately.
    /// </summary>
    /// <param name="store"></param>
    /// <param name="domainClassId">Identifies the domain class this tool should instantiate.</param>
    /// <returns>prototype of the object or group of objects to be created by tool</returns>
    protected override ElementGroupPrototype CreateElementToolPrototype(Store store, Guid domainClassId)
    {
        if (domainClassId == Transistor.DomainClassId)
        {
            Transistor transistor = new Transistor(store);

            transistor.Base = new ComponentTerminal(store);
            transistor.Collector = new ComponentTerminal(store);
            transistor.Emitter = new ComponentTerminal(store);

            transistor.Base.Name = "base";
            transistor.Collector.Name = "collector";
            transistor.Emitter.Name = "emitter";

            // Create an ElementGroup for the Toolbox.
            ElementGroup elementGroup = new ElementGroup(store.DefaultPartition);
            elementGroup.AddGraph(transistor, true);
            // AddGraph includes the embedded parts

            return elementGroup.CreatePrototype();
        }
        else
        {
            return base.CreateElementToolPrototype(store, domainClassId);
}  }    }

Dostosowywanie narzędzia połączeń

Zazwyczaj narzędzie element należy utworzyć podczas tworzenia nowej klasy łącznika.Alternatywnie można na przeciążenie jedno narzędzie pozwalając typów po obu stronach, aby określić typ relacji.Na przykład można zdefiniować jedno narzędzie połączenia, który można utworzyć zarówno osoby osoba relacje i relacje miasta osoby.

Narzędzia połączenia wywołania konstruktorów połączenia.Użyć konstruktorów połączenia, aby określić, jak użytkownicy można łączyć elementów w wygenerowanym designer.Konstruktorzy połączenia określić elementy, które mogą być połączone i rodzaju łącze, utworzoną między nimi.

Konstruktor połączenia jest tworzona automatycznie podczas tworzenia relacji odwołanie między klasami domeny.Podczas mapowania narzędzie połączenia, można użyć Konstruktora tego połączenia.Aby uzyskać więcej informacji o tworzeniu narzędzi połączenia, zobacz Dostosowywanie narzędzi i przybornika.

Konstruktor połączenie domyślne można zmodyfikować, tak, aby zajmować inny zakres typów źródłowej i docelowej i tworzyć różne typy relacji.

Można także napisać niestandardowy kod dla producentów połączenia określić źródłowej i docelowej klasy dla połączenia, typ połączenia, należy zdefiniować oraz podejmowania innych działań związanych z tworzeniem połączenia.

Bb126279.collapse_all(pl-pl,VS.110).gifStruktura konstruktorów połączenia

Konstruktorzy połączenia zawiera jeden lub więcej łącze Połącz dyrektyw, które określają relacji domeny i elementy źródłowe i docelowe.Na przykład w szablonie roztwór przepływu zadań widać CommentReferencesSubjectsBuilder w DSL Explorer.Ten konstruktor połączenia zawiera jedno łącze Połącz dyrektywy o nazwie CommentReferencesSubjects, który jest mapowany do domeny relacji CommentReferencesSubjects.Połączenie to łącze, dyrektywa zawiera dyrektywy rolę źródła, który wskazuje Comment klasy domeny i dyrektywy roli docelowego wskazywanego przez FlowElement klasy domeny.

Bb126279.collapse_all(pl-pl,VS.110).gifZa pomocą połączenia konstruktorów ograniczyć źródłowego i docelowego ról

Można użyć konstruktorów połączenia, do ograniczenia występowania niektórych klas w rolę źródłowego lub docelowego rola relacji danej domeny.Na przykład może mieć klasy podstawowej domeny, która ma relację domeny do innej domeny klasy, ale nie ma wszystkich klas pochodnych określonej klasy podstawowej, mają te same role w tej relacji.W roztworze przepływu zadań istnieją cztery domeny konkretnych klas (StartPoint, punkt końcowy, MergeBranch i synchronizacja), które dziedziczą bezpośrednio z klasy abstrakcyjne domeny FlowElement i dwóch konkretnych domeny klas (zadanie i ObjectInState), które pośrednio dziedziczą z niego.Jest również relacji odniesienia przepływu, że trwa klas domeny FlowElement zarówno jej rolę źródła, jak i rolę docelową.Wystąpienie klasy domeny punkt końcowy nie powinien być źródłem wystąpienie relacji przepływu ani instancji klasy StartPoint należy docelowego wystąpienia relacji przepływu.Konstruktor FlowBuilder połączenia ma łącze Połącz dyrektywy o nazwie przepływu, który określa domeny, które można odtworzyć klasy rolę źródła (zadania, MergeBranch, StartPoint i synchronizacja), które mogą odegrać rolę docelowej (MergeBranch, punkt końcowy i synchronizacji).

Bb126279.collapse_all(pl-pl,VS.110).gifKonstruktorzy połączenia z wieloma łącze Połącz dyrektyw

Można dodać więcej niż jedno łącze Połącz dyrektywy do konstruktora połączenia.Może to ułatwić ukryć niektóre złożoności modelu domeny od użytkowników i przechowywać Przybornik z uniknąć zbyt.Możesz dodać łącze połączenia dyrektyw w sprawie kilku relacje różne domeny do konstruktora jednego połączenia.Jednakże powinien połączyć relacji domen, gdy wykonują tę samą funkcję.

W roztworze zadania przepływu przepływu narzędzie połączenie służy do rysowania wystąpień zarówno przepływu i relacje przejścia przepływu obiektu domeny.FlowBuilder, Konstruktor połączenia oprócz łącze przepływu połączyć dyrektywy opisane wcześniej, łączy dwa połączenia dyrektyw o nazwie przejścia przepływu obiektu.Tych dyrektyw, określić, że wystąpienie relacji z przejścia przepływu obiektu mogą zostać sformułowane między wystąpieniami klasy ObjectInState domeny lub wystąpienie ObjectInState do wystąpienia zadania, ale nie między dwa wystąpienia zadania lub wystąpienie zadania do wystąpienia ObjectInState.Jednak wystąpienie relacji przepływu mogą zostać sformułowane między dwa wystąpienia zadania.Jeśli skompilować i uruchomić zadanie przepływu roztworu, można zaobserwować, że rysunek strumień z instancji ObjectInState do wystąpienia zadania tworzy instancję przejścia przepływu obiektu, ale rysunku przepływu między dwa wystąpienia zadania tworzy wystąpienie przepływu.

Bb126279.collapse_all(pl-pl,VS.110).gifNiestandardowy kod dla konstruktorów połączenia

Istnieją cztery pola wyboru w interfejsie użytkownika, określające różne rodzaje dostosowywania konstruktorów połączenia:

  • zaakceptować niestandardowe pole wyboru na dyrektywy rolę źródłowego lub docelowego

  • niestandardowe połączenia pole wyboru na dyrektywy rolę źródłowego lub docelowego

  • używa niestandardowych Połącz pole wyboru na dyrektywa connect

  • Jest niestandardowa właściwość konstruktora połączenia

Musisz podać kod programu, niektóre wprowadzania tych dostosowań.Jakiego kodu musi dostaw, zaznacz przynajmniej jedną z tych pól, kliknij przycisk Przekształć wszystkie szablony i następnie skompiluj rozwiązanie.Wynikiem będzie raport o błędach.Kliknij dwukrotnie raport o błędach, aby wyświetlić komentarz, który wyjaśnia, jaki jest numer kierunkowy należy dodać.

[!UWAGA]

Aby dodać niestandardowy kod, tworzenia definicji częściowej klasy w pliku kod oddzielnych plików kodu w folderach GeneratedCode.Aby uniknąć utraty wyników pracy, nie należy edytować pliki wygenerowany kod.Aby uzyskać więcej informacji, zobacz Zastępowanie i rozszerzanie klas generowanych.

Bb126279.collapse_all(pl-pl,VS.110).gifTworzenie kodu niestandardowego połączenia

W każdym łączu Połącz dyrektywy, dyrektyw rolę źródła kartę definiuje od co użytkownik wpisze można przeciągnąć.Podobnie dyrektyw roli docelowej definiuje kartę co użytkownik wpisze można przeciągnąć.Dla każdego typu można dokładniejszego określenia czy zezwalać na połączenia (dla tego łącza połączenia dyrektywy) przez ustawienie Zaakceptować niestandardowe flagę i następnie dostarczenie dodatkowego kodu.

Można również dostosować to, co się dzieje, gdy połączenie jest nawiązywane.Na przykład, można dostosować tylko przypadku, gdy przeciąganie występuje do lub z danej klasy, połączyć jeden łącze wszystkich przypadkach dyrektywa reguluje, lub cały konstruktora połączenia FlowBuilder.Dla każdej z tych opcji można ustawić flagi niestandardowej na odpowiednim poziomie.Podczas przekształcania wszystkie szablony i spróbować zbudować roztwór komunikaty o błędach bezpośrednie komentarze znajdujące się w generowanym kodzie.Uwagi te identyfikują musi dostaw.

W próbce Diagram składników konstruktora połączenia dla połączenia relacji domeny jest dostosowany do ograniczenia połączeń, które mogą być wprowadzone między portami.Na następującej ilustracji pokazano, że można dokonać połączenia tylko z OutPort elementy do InPort elementów, ale można zagnieżdżać elementy wewnątrz siebie nawzajem.

Połączeń przychodzących na OutPort składnik zagnieżdżone

Konstruktor połączeń

W związku z tym można określić, że połączenie może pochodzić z zagnieżdżonych składnika do OutPort.Aby określić takie połączenia, należy ustawić Używa niestandardowych zaakceptować na InPort typu rolę źródła i OutPort typu rolę docelowej w Szczegóły DSL okna, jak pokazano na rysunkach poniżej:

Łącze Połącz dyrektywy w Eksploratorze DSL

Obraz przedstawiający konstruktora połączeń

Łącze Połącz dyrektywy w oknie Szczegóły DSL

Bb126279.ConnectionBuilder_4b(pl-pl,VS.110).png

Następnie należy podać metody w klasie ConnectionBuilder:

  public partial class ConnectionBuilder
  {
    /// <summary>
    /// OK if this component has children
    /// </summary>
    private static bool CanAcceptInPortAsSource(InPort candidate)
    {
       return candidate.Component.Children.Count > 0;
    }

    /// <summary>
    /// Only if source is on parent of target.
    /// </summary>
    private static bool CanAcceptInPortAndInPortAsSourceAndTarget                (InPort sourceInPort, InPort targetInPort)
    {
      return sourceInPort.Component == targetInPort.Component.Parent;
    }
// And similar for OutPorts…

Aby uzyskać więcej informacji na temat dostosowywania modelu przy użyciu kodu programu, zobacz Przeglądanie i aktualizowanie modelu w kod programu.

Podobny kod, można użyć na przykład, aby uniemożliwić użytkownikom tworzenie pętli z łączami nadrzędny podrzędny.Ograniczenia te są uznawane za "twardy" ograniczenia, ponieważ użytkownicy nie mogą naruszać je w dowolnym momencie.Można również utworzyć sprawdzanie poprawności "miękkich", które użytkownicy mogą tymczasowo obejść tworząc nieprawidłowe konfiguracje, które nie będą mogli zapisać.

Bb126279.collapse_all(pl-pl,VS.110).gifDobrą praktyką w definiowaniu konstruktorów połączenia

Należy zdefiniować jeden konstruktor połączenia do tworzenia różnych typów relacji, tylko wtedy, gdy pojęciowo powiązanych.W próbce przepływu zadań umożliwia tym samym konstruktorze tworzenie przepływów między zadaniami, a także między zadaniami i obiektów.Jednakże byłoby mylące tworzyć relacje między komentarze i zadań za pomocą tej samej konstruktora.

Można zdefiniować konstruktora połączenia dla wielu typów relacji, powinny zapewnić, że nie można dopasować więcej niż jeden typ z tej samej pary obiektu źródłowego i docelowego.W przeciwnym wypadku wyniki będą nieprzewidywalne.

Zastosowany "twardy" ograniczenia za pomocą kodu niestandardowego, ale należy rozważyć, czy użytkownicy powinni mieć tymczasowo nawiązywanie połączeń nieprawidłowy.Jeśli te powinny można modyfikować ograniczenia, tak, aby połączenia nie są zatwierdzone, dopóki użytkownicy próbują zapisywać zmiany.

Zobacz też

Koncepcje

Dostosowywanie tworzenia elementu i przepływu

Dostosowywanie zachowania kopii

Jak: Dodawanie obsługi przeciągania i upuszczania

Przeglądanie i aktualizowanie modelu w kod programu

Inne zasoby

Diagramy przykładowe DSL