Udostępnij za pośrednictwem


Tworzenie kontrolek interfejsu użytkownika jako pakietów NuGet

Począwszy od Visual Studio 2017 r., możesz skorzystać z dodatkowych funkcji dla kontrolek platformy UWP i WPF dostarczanych w pakietach NuGet. Ten przewodnik przeprowadzi Cię przez te możliwości w kontekście kontrolek platformy UWP przy użyciu przykładu ExtensionSDKasNuGetPackage. To samo dotyczy kontrolek WPF, chyba że wspomniano inaczej.

Wymagania wstępne

  1. Visual Studio 2017
  2. Opis sposobu tworzenia pakietów platformy UWP

Generowanie układu biblioteki

Uwaga

Dotyczy to tylko kontrolek platformy UWP.

GenerateLibraryLayout Ustawienie właściwości gwarantuje, że dane wyjściowe kompilacji projektu są generowane w układzie gotowym do spakowania bez konieczności tworzenia pojedynczych wpisów pliku w nuspec.

Z właściwości projektu przejdź do karty kompilacji i zaznacz pole wyboru "Generuj układ biblioteki". Spowoduje to zmodyfikowanie pliku projektu i ustawienie GenerateLibraryLayout flagi na true dla aktualnie wybranej konfiguracji kompilacji i platformy.

Alternatywnie edytuj plik projektu, aby dodać <GenerateLibraryLayout>true</GenerateLibraryLayout> go do pierwszej bezwarunkowej grupy właściwości. Dotyczyłoby to właściwości niezależnie od konfiguracji kompilacji i platformy.

Dodawanie obsługi okienka przybornika/zasobów dla kontrolek XAML

Aby kontrolka XAML pojawiła się w przyborniku projektanta XAML w Visual Studio i okienku Zasoby programu Blend, utwórz VisualStudioToolsManifest.xml plik w katalogu głównym tools folderu projektu pakietu. Ten plik nie jest wymagany, jeśli nie potrzebujesz kontrolki, która ma być wyświetlana w przyborniku ani w okienku Zasoby.

\build
\lib
\tools
    VisualStudioToolsManifest.xml

Struktura pliku jest następująca:

<FileList>
  <File Reference = "your_package_file">
    <ToolboxItems UIFramework="WPF" VSCategory="vs_category" BlendCategory="blend_category">
      <Item Type="type_full_name_1" />

      <!-- Any number of additional Items -->
      <Item Type="type_full_name_2" />
      <Item Type="type_full_name_3" />
    </ToolboxItems>
  </File>
</FileList>

gdzie:

  • your_package_file: nazwa pliku kontrolnego, na ManagedPackage.winmd przykład ("ManagedPackage" jest dowolną nazwą używaną w tym przykładzie i nie ma innego znaczenia).
  • vs_category: etykieta grupy, w której kontrolka powinna być wyświetlana w przyborniku projektanta Visual Studio. Element jest VSCategory niezbędny do wyświetlania kontrolki w przyborniku. ui_framework: Nazwa struktury, na przykład "WPF", należy pamiętać, że UIFramework atrybut jest wymagany w węzłach ToolboxItems w Visual Studio 16.7 (wersja zapoznawcza 3 lub nowsza), aby kontrolka pojawiła się w przyborniku.
  • blend_category: etykieta grupy, w której kontrolka powinna być wyświetlana w okienku Zasoby projektanta blend. Element jest BlendCategory niezbędny do wyświetlania kontrolki w zasobach.
  • type_full_name_n: w pełni kwalifikowana nazwa dla każdej kontrolki, w tym przestrzeń nazw, na przykład ManagedPackage.MyCustomControl. Należy pamiętać, że format kropki jest używany zarówno dla typów zarządzanych, jak i natywnych.

W bardziej zaawansowanych scenariuszach można również uwzględnić wiele <File> elementów, <FileList> gdy pojedynczy pakiet zawiera wiele zestawów kontrolek. Możesz również mieć wiele <ToolboxItems> węzłów w obrębie jednego, <File> jeśli chcesz zorganizować kontrolki w oddzielne kategorie.

W poniższym przykładzie kontrolka zaimplementowana ManagedPackage.winmd w programie pojawi się w Visual Studio i Blend w grupie o nazwie "Zarządzany pakiet" i "MyCustomControl" pojawi się w tej grupie. Wszystkie te nazwy są dowolne.

<FileList>
  <File Reference = "ManagedPackage.winmd">
    <ToolboxItems UIFramework="WPF" VSCategory="Managed Package" BlendCategory="Managed Package">
      <Item Type="ManagedPackage.MyCustomControl" />
    </ToolboxItems>
  </File>
</FileList>

An example control as it appear in Visual Studio

An example control as it appear in Blend

Uwaga

Należy jawnie określić każdą kontrolkę, którą chcesz zobaczyć w okienku przybornika/zasobów. Upewnij się, że określono je w formacie Namespace.ControlName.

Dodawanie ikon niestandardowych do kontrolek

Aby wyświetlić ikonę niestandardową w okienku przybornika/zasobów, dodaj obraz do projektu lub odpowiadający mu design.dll projekt o nazwie "Namespace.ControlName".extension" i ustaw akcję kompilacji na "Zasób osadzony". Należy również upewnić się, że skojarzony atrybut AssemblyInfo.cs określa atrybut ProvideMetadata — [assembly: ProvideMetadata(typeof(RegisterMetadata))]. Zobacz ten przykład.

Obsługiwane formaty to .png, , .jpg, .gif.jpeg, i .bmp. Zalecany format to BMP24 w 16 pikselach o 16 pikseli.

Tool box icon sample

Różowe tło jest zastępowane w czasie wykonywania. Ikony są ponownie kolorowane po zmianie motywu Visual Studio i oczekiwany jest kolor tła. Aby uzyskać więcej informacji, zapoznaj się z tematem Obrazy i ikony dla Visual Studio.

W poniższym przykładzie projekt zawiera plik obrazu o nazwie "ManagedPackage.MyCustomControl.png".

Setting a custom icon in a project

Uwaga

W przypadku kontrolek natywnych należy umieścić ikonę jako zasób w projekcie design.dll .

Obsługa określonych wersji platformy Windows

Pakiety platformy UWP mają element TargetPlatformVersion (TPV) i TargetPlatformMinVersion (TPMinV), które definiują górne i dolne granice wersji systemu operacyjnego, w której można zainstalować aplikację. Protokół TPV dodatkowo określa wersję zestawu SDK, względem której utworzono aplikację. Należy pamiętać o tych właściwościach podczas tworzenia pakietu platformy UWP: używanie interfejsów API spoza granic wersji platformy zdefiniowanych w aplikacji spowoduje niepowodzenie kompilacji lub niepowodzenie aplikacji w czasie wykonywania.

Załóżmy na przykład, że ustawiono moduł TPMinV dla pakietu kontrolek na wartość Windows 10 Anniversary Edition (10.0; Skompiluj 14393), aby upewnić się, że pakiet jest używany tylko przez projekty platformy UWP zgodne z tym dolnym ograniczeniem. Aby umożliwić korzystanie z pakietu przez projekty platformy UWP, należy spakować kontrolki z następującymi nazwami folderów:

\lib\uap10.0.14393\*
\ref\uap10.0.14393\*

NuGet automatycznie sprawdzi moduł TPMinV projektu zużywanego i zakończy się niepowodzeniem, jeśli jest niższa niż Windows 10 Anniversary Edition (10.0; Kompilacja 14393)

W przypadku WPF załóżmy, że chcesz, aby pakiet kontrolek WPF był używany przez projekty przeznaczone dla .NET Framework w wersji 4.6.1 lub nowszej. Aby to wymusić, należy spakować kontrolki z następującymi nazwami folderów:

\lib\net461\*
\ref\net461\*

Dodawanie obsługi czasu projektowania

Aby skonfigurować miejsce wyświetlania właściwości kontrolki w inspektorze właściwości, dodaj niestandardowe adornery itp., umieść design.dll plik w lib\uap10.0.14393\Design folderze odpowiednio do platformy docelowej. Ponadto, aby upewnić się, że funkcja Edytuj szablon > Edytuj kopię działa, należy uwzględnić Generic.xaml słowniki zasobów i, które są scalane w folderze (ponownie przy użyciu rzeczywistej <your_assembly_name>\Themes nazwy zestawu). (Ten plik nie ma wpływu na zachowanie środowiska uruchomieniowego kontrolki). Struktura folderów byłaby w ten sposób wyświetlana w następujący sposób:

\lib
  \uap10.0.14393
    \Design
      \MyControl.design.dll
    \your_assembly_name
      \Themes
        Generic.xaml

W przypadku WPF kontynuując przykład, w którym chcesz, aby pakiet kontrolek WPF był używany przez projekty przeznaczone dla .NET Framework w wersji 4.6.1 lub nowszej:

\lib
  \net461
    \Design
      \MyControl.design.dll
    \your_assembly_name
      \Themes
        Generic.xaml

Uwaga

Domyślnie właściwości kontrolki będą wyświetlane w kategorii Różne w inspektorze właściwości.

Używanie ciągów i zasobów

Możesz osadzić zasoby ciągów (.resw) w pakiecie, które mogą być używane przez kontrolkę lub korzystający projekt platformy UWP, ustaw właściwość .reswBuild Action pliku na PRIResource.

Na przykład zapoznaj się z tematem MyCustomControl.cs w przykładzie ExtensionSDKasNuGetPackage.

Uwaga

Dotyczy to tylko kontrolek platformy UWP.

Zobacz też