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
- Visual Studio 2017
- 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ć, żeUIFramework
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>
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.
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".
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ść .resw
Build Action pliku na PRIResource.
Na przykład zapoznaj się z tematem MyCustomControl.cs w przykładzie ExtensionSDKasNuGetPackage.
Uwaga
Dotyczy to tylko kontrolek platformy UWP.