Udostępnij przez


Korzystanie z zestawu SDK aplikacji systemu Windows w aplikacji WPF

Zestaw SDK aplikacji systemu Windows to kolejna ewolucja na platformie deweloperów aplikacji systemu Windows. W tym temacie pokazano, jak można używać interfejsów API zestawu SDK aplikacji systemu Windows (i interfejsów API środowiska uruchomieniowego systemu Windows) w aplikacji Windows Presentation Foundation (WPF).

  • W wielu przypadkach należy ponownie utworzyć aplikację WPF w postaci aplikacji WinUI 3 . Jedną z zalet przejścia do systemu WinUI 3 jest posiadanie dostępu do systemu Fluent Design System (zobacz Projektowanie i kod aplikacji systemu Windows). Usługa WinUI 3 jest częścią zestawu SDK aplikacji systemu Windows — więc naturalnie aplikacja WinUI 3 może korzystać z innych funkcji i interfejsów API zestawu SDK aplikacji systemu Windows. W tym temacie nie opisano procesu migrowania aplikacji WPF do systemu WinUI 3.
  • Jeśli jednak okaże się, że używasz funkcji WPF, które nie są jeszcze dostępne w systemie WinUI 3, nadal możesz używać funkcji zestawu SDK aplikacji systemu Windows (takich jak cykl życia aplikacji, MRT Core, DWriteCore i inne) w aplikacji WPF. W tym temacie pokazano, jak to zrobić.

W przypadku, gdy nie masz jeszcze istniejącego projektu WPF — lub chcesz przećwiczyć ten proces — ten temat zawiera kroki tworzenia projektu WPF, dzięki czemu można wykonać czynności i skonfigurować go do wywoływania interfejsów API zestawu SDK aplikacji systemu Windows.

Wymagania wstępne

  1. Instalowanie narzędzi dla zestawu SDK aplikacji systemu Windows.
  2. W tym temacie omówiono zarówno rozpakowane, jak i spakowane aplikacje WPF. Jeśli Twoja aplikacja WPF jest rozpakowana (co jest domyślnym ustawieniem dla aplikacji WPF), upewnij się, że wszystkie zależności dla aplikacji niepakowanych są zainstalowane (zobacz przewodnik wdrażania Windows App SDK dla aplikacji zależnych od platformy, spakowanych z lokalizacją zewnętrzną lub rozpakowanych). Aby to zrobić, przejdź do sekcji Najnowsze pliki do pobrania zestawu SDK aplikacji Windows, a następnie pobierz, rozpakuj i uruchom jedną z dostępnych do pobrania stabilnych wersji środowiska wykonawczego .

Ważne

Wersja zainstalowanego środowiska uruchomieniowego musi być zgodna z wersją pakietu NuGet Microsoft.WindowsAppSDK , który zostanie zainstalowany w późniejszym kroku.

Aby uzyskać więcej informacji na temat terminów bez opakowania i w opakowaniu, zobacz Zalety i wady opakowywania aplikacji.

Utwórz projekt WPF, jeśli jeszcze go nie masz

Jeśli masz już projekt WPF, możesz przejść do następnej sekcji.

  1. W programie Visual Studio utwórz nowy projekt aplikacji WPF języka C# (który jest projektem platformy .NET). Należy zachować ostrożność podczas wybierania szablonu projektu o dokładnej nazwie Aplikacja WPF, a nie aplikacji WPF (.NET Framework).
  2. Nadaj projektowi nazwę i zaakceptuj wszystkie opcje domyślne.

Masz teraz projekt, który kompiluje nieopakowaną aplikację WPF.

Konfigurowanie projektu WPF pod kątem obsługi zestawu SDK aplikacji systemu Windows

Najpierw zmodyfikujemy plik projektu.

  1. W Eksploratorze rozwiązań kliknij prawym przyciskiem myszy projekt i wybierz polecenie Edytuj plik projektu.

  2. Ten krok umożliwia wywoływanie interfejsów API środowiska Windows Runtime (WinRT) (w tym interfejsów API zestawu SDK aplikacji systemu Windows). Wewnątrz elementu PropertyGroup jest element TargetFramework , który jest ustawiony na wartość taką jak net6.0. Dołącz do tej wartości platformy docelowej moniker (w szczególności Target Framework Moniker). Na przykład użyj następującego polecenia, jeśli aplikacja jest przeznaczona dla systemu Windows 10 w wersji 2004:

    <TargetFramework>net8.0-windows10.0.19041.0</TargetFramework>
    
  3. Również wewnątrz elementu PropertyGroup dodaj element RuntimeIdentifiers , jak pokazano poniżej. Jeśli używasz platformy .NET 8 lub nowszej, wówczas użyj wartości win-x86;win-x64;win-arm64.

    <RuntimeIdentifiers>win-x86;win-x64;win-arm64</RuntimeIdentifiers>
    
  4. Domyślnie aplikacja WPF jest rozpakowana (co oznacza, że nie jest zainstalowana przy użyciu pliku MSIX). Rozpakowana aplikacja musi zainicjować środowisko uruchomieniowe zestawu SDK aplikacji systemu Windows przed użyciem jakiejkolwiek innej funkcji zestawu SDK aplikacji systemu Windows. Możesz to zrobić automatycznie, gdy aplikacja zostanie uruchomiona za pomocą automatycznej inicjalizacji. Wystarczy ustawić (również wewnątrz elementu PropertyGroup) właściwość projektu odpowiednio, jak poniżej:

    <WindowsPackageType>None</WindowsPackageType>
    

    Jeśli masz zaawansowane potrzeby (takie jak niestandardowa obsługa błędów lub załadowanie określonej wersji zestawu SDK aplikacji systemu Windows), zamiast automatycznej inicjalizacji możesz jawnie wywołać interfejs API programu bootstrapper — aby uzyskać więcej informacji, zobacz Używanie środowiska uruchomieniowego zestawu Windows App SDK dla aplikacji pakietowanych z lokalizacją zewnętrzną lub bez pakietu.

  5. Zapisz i zamknij plik projektu.

Następnie zainstalujemy pakiet NuGet zestawu SDK aplikacji systemu Windows w projekcie.

  1. W Eksploratorze rozwiązań , kliknij prawym przyciskiem myszy na węźle Zależności swojego projektu i wybierz Zarządzaj pakietami NuGet....
  2. W oknie Menedżera pakietów NuGet wybierz kartę Przeglądaj i zainstaluj pakiet Najnowszą stabilną wersjęMicrosoft.WindowsAppSDK.

Korzystanie z niektórych funkcji zestawu SDK aplikacji systemu Windows w aplikacji WPF

Ta sekcja zawiera bardzo prosty przykład wywoływania interfejsów API zestawu SDK aplikacji systemu Windows z aplikacji WPF. Używa funkcji MRT Core (zobacz Zarządzanie zasobami za pomocą narzędzia MRT Core). Jeśli ten przykład działa dla twojego projektu WPF (a jeśli utworzyłeś nowy dla tego przewodnika, to zadziała), możesz wykonać następujące kroki.

  1. Dodaj następujący znacznik do MainWindow.xaml (możesz wkleić go w katalogu głównym Grid):

    <StackPanel>
        <Button HorizontalAlignment="Center" Click="Button_Click">Click me!</Button>
        <TextBlock HorizontalAlignment="Center" x:Name="myTextBlock">Hello, World!</TextBlock>
    </StackPanel>
    
  2. Teraz dodamy kod, który używa klasy ResourceManager w Windows App SDK, aby załadować zasób ciągu znaków.

    1. Dodaj nowy element pliku zasobów (.resw) do projektu (pozostaw go z domyślną nazwą Resources.resw).

    2. Po otwarciu pliku zasobów w edytorze utwórz nowy zasób ciągu z następującymi właściwościami.

      • Nazwa: Komunikat:
      • Wartość: Witaj, zasoby!
    3. Zapisz i zamknij plik zasobów.

    4. W MainWindow.xaml.csdodaj następującą procedurę obsługi zdarzeń:

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        // Construct a resource manager using the resource index generated during build.
        var manager = 
          new Microsoft.Windows.ApplicationModel.Resources.ResourceManager();
    
        // Look up a string in the resources file using the string's name.
        myTextBlock.Text = manager.MainResourceMap.GetValue("Resources/Message").ValueAsString;
    }
    
  3. Skompiluj projekt i uruchom aplikację. Kliknij przycisk, aby wyświetlić wyświetlany ciąg Hello, resources! .

Wskazówka

Jeśli w czasie wykonywania zostanie wyświetlone okno komunikatu wskazujące, że aplikacja potrzebuje określonej wersji środowiska Uruchomieniowego aplikacji systemu Windows i, czy chcesz ją zainstalować teraz, a następnie kliknij przycisk Tak. To przeniesie Cię do najnowszych plików do pobrania dla zestawu SDK aplikacji systemu Windows. Aby uzyskać więcej informacji, zobacz sekcję Wymagania wstępne powyżej.

Zobacz również Architektura środowiska uruchomieniowego, aby dowiedzieć się więcej na temat zależności pakietu Framework używanego przez aplikację, gdy używasz zestawu Windows App SDK, oraz dodatkowych składników wymaganych do działania aplikacji bez pakietu.

Pakowanie i wdrażanie aplikacji WPF za pomocą pliku MSIX

Niektóre funkcje i interfejsy API systemu Windows (w tym API powiadomień Windows App SDK ) wymagają, aby aplikacja miała tożsamość pakietu podczas działania (innymi słowy, aplikacja musi być zapakowana). Aby uzyskać więcej informacji, zobacz Funkcje wymagające tożsamości pakietu.

  1. W Eksploratorze rozwiązań w programie Visual Studio kliknij rozwiązanie prawym przyciskiem myszy i wybierz polecenie Dodaj>nowy projekt....
  2. W oknie dialogowym Dodaj nowy projekt wyszukaj pakietowanie, wybierz szablon projektu Windows Application Packaging Project w języku C# i kliknij Dalej.
  3. Nadaj projektowi nazwę i kliknij Utwórz.
  4. Chcemy określić, które aplikacje w rozwiązaniu mają być uwzględnione w pakiecie. W projekcie pakowania (nie projektu WPF) kliknij prawym przyciskiem myszy węzeł Zależności, a następnie wybierz pozycję Dodaj odwołanie do projektu....
  5. Na liście projektów w rozwiązaniu wybierz projekt WPF, a następnie kliknij przycisk OK.
  6. Rozwiń węzeł zależności projektu pakietowania >Aplikacje, i upewnij się, że projekt WPF jest odwoływany i wyróżniony pogrubioną czcionką. Oznacza to, że będzie on używany jako punkt wyjścia dla pakietu.
  7. Kliknij prawym przyciskiem myszy projekt opakowania, a następnie wybierz Ustaw jako projekt startowy.
  8. Kliknij prawym przyciskiem myszy projekt WPF, a następnie wybierz polecenie Edytuj plik projektu.
  9. Usuń <WindowsPackageType>None</WindowsPackageType>, zapisz i zamknij.
  10. Na liście rozwijanej Platformy rozwiązań wybierz x64 (zamiast Any CPU).
  11. Upewnij się, że możesz skompilować i uruchomić.

Teraz, gdy aplikacja WPF została spakowana, możesz wywoływać interfejsy API wymagające tożsamości pakietu. W MainWindow.xaml.cszmodyfikuj procedurę obsługi zdarzeń, aby wyglądała następująco:

private void Button_Click(object sender, RoutedEventArgs e)
{
    var notification = new AppNotificationBuilder()
        .AddArgument("action", "viewConversation")
        .AddArgument("conversationId", "9813")
        .AddText("Andrew sent you a picture")
        .AddText("Check this out, The Enchantments in Washington!")
        .BuildNotification();

    AppNotificationManager.Default.Show(notification);
}

Skompiluj i uruchom ponownie. Kliknij przycisk i upewnij się, że wyświetla się powiadomienie typu 'toast'. Kiedy zostanie wywołany z procesu, który w czasie wykonywania nie ma tożsamości pakietu, interfejsy API powiadomień zgłaszają wyjątek.

Uwaga / Notatka

Kroki w tej sekcji pokazują, jak utworzyć aplikację w pakiecie . Alternatywą jest utworzenie spakowanej aplikacji z zewnętrzną lokalizacją. Aby przypomnieć sobie wszystkie te terminy, zobacz Zalety i wady pakietowania aplikacji.