Aracılığıyla paylaş


Windows Forms (WinForms) uygulamasında Windows App SDK kullanma

Windows App SDK Windows app geliştirme platformundaki bir sonraki evrimdir. Ancak bu konu, Windows Forms (WinForms) uygulamasında Windows App SDK API'lerini (ve Windows Runtime API'leri) nasıl kullanabileceğinizi gösterir!

  • Çoğu durumda, WinForms uygulamanızı bir WinUI 3 uygulaması biçiminde yeniden oluşturmak istersiniz. WinUI'ye geçmenin avantajlarından sadece bir tanesidir Fluent Design System'a erişim sağlamak (ayrıca bkz. Design and code Windows apps). WinUI de Windows App SDK bir parçasıdır; bu nedenle, doğal olarak, bir WinUI uygulaması diğer Windows App SDK özelliklerini ve API'lerini de kullanabilir. Bu konu, WinForms uygulamanızı WinUI'ye geçirme işlemini kapsamaz.
  • Ancak Henüz WinUI'de bulunmayan WinForms özelliklerini kullandığınızı fark ederseniz, WinForms uygulamanızda Windows App SDK özelliklerini (Uygulama Yaşam Döngüsü, MRT Core, DWriteCore ve diğerleri gibi) kullanmaya devam edebilirsiniz. Bu konu size nasıl yapılacağını gösterir.

Mevcut bir WinForms project yoksa veya işlemi uygulamak istiyorsanız bu konu başlığında, Windows App SDK API'leri çağıracak şekilde izleyebileceğiniz ve yapılandırabileceğiniz bir WinForms project oluşturma adımları yer alır.

Önkoşullar

  1. Windows App SDK için araçları yükleyin.
  2. Bu konu hem paketlenmemiş hem de paketlenmiş WinForms uygulamalarını kapsar. WinForms uygulamanız paketten çıkarılmışsa (varsayılan olarak WinForms uygulamalarıdır), paketlenmemiş uygulamalar için tüm bağımlılıkların yüklendiğinden emin olun (dış konumla paketlenmiş veya paketlenmemiş çerçeveye bağımlı uygulamalar için Windows App SDK dağıtım kılavuzuna bakın). Windows App SDK için En Son İndirmeler sayfasını ziyaret etmek, ardından kararlı sürüm Çalışma Zamanı indirmelerinden birini indirip açarak ve çalıştırarak hızlı bir yol bulabilirsiniz.

Önemli

Yüklediğiniz Çalışma Zamanı sürümünün, sonraki bir adımda yüklenecek Microsoft.WindowsAppSDK NuGet paketinin sürümüyle eşleşmesi gerekir.

Paketlenmemiş ve paketlenmiş koşulları hakkında daha fazla bilgi için bkz. uygulamanızı paketlemenin avantajları ve dezavantajları.

Eğer hâlâ bir WinForms projeniz yoksa, bir WinForms projesi oluşturun.

Zaten bir WinForms project varsa sonraki bölüme geçebilirsiniz.

  1. Visual Studio yeni bir C# Windows Forms App project (.NET project) oluşturun. Dikkat edin ki, projeyi Windows Forms App tam adıyla seçtiğinizden emin olun, Windows Forms App (.NET Framework) olanıyla değil.
  2. project bir ad verin ve varsayılan seçenekleri kabul edin.

Artık paketlenmemiş bir WinForms uygulaması oluşturan bir projeye sahipsiniz.

WinForms projenizi Windows App SDK desteği ile uyumlu olacak şekilde yapılandırın

İlk olarak project dosyasını düzenleyeceğiz.

  1. Solution Explorer'da project sağ tıklayın ve Project Dosyasını Düzenle'i seçin.

  2. Bu adım, Windows Runtime (WinRT) API'lerini (Windows App SDK API'leri) çağırmanızı sağlar. PropertyGroup öğesinin içinde, net6.0 gibi bir değere ayarlanmış TargetFramework öğesi bulunur. Bu hedef çerçeve değerine bir takma ad (özellikle bir Hedef Çerçeve Takma Adı) ekleyin. Örneğin, uygulamanız Windows 10 sürüm 2004'i hedeflediyse aşağıdakileri kullanın:

    <TargetFramework>net8.0-windows10.0.19041.0</TargetFramework>
    
  3. Ayrıca PropertyGroup öğesinin içine aşağıdaki gibi bir RuntimeIdentifiers öğesi ekleyin:

    <RuntimeIdentifiers>win-x86;win-x64;win-arm64</RuntimeIdentifiers>
    
  4. Varsayılan olarak, bir WinForms uygulaması paketten çıkarılır (yani MSIX kullanılarak yüklenmez). Paketlenmemiş bir uygulamanın, Windows App SDK başka bir özelliğini kullanmadan önce Windows App SDK çalışma zamanını başlatması gerekir. Bunu, uygulamanız otomatik başlatma yoluyla başlatıldığında otomatik olarak yapabilirsiniz. WindowsPackageType öğesinin içinde, proje özelliğini uygun bir şekilde aşağıdaki gibi hemen ayarladınız:

    <WindowsPackageType>None</WindowsPackageType>
    

    Gelişmiş gereksinimleriniz varsa (örneğin, özel hata işleme, veya Windows App SDK belirli bir sürümünü yüklemek için), ardından auto-initialization yerine önyükleyici API'sini açıkça çağırabilirsiniz; daha fazla bilgi için bkz. Dış konumla paketlenmiş veya paketlenmemiş uygulamalar için Windows App SDK çalışma zamanını kullanma.

  5. project dosyasını kaydedin ve kapatın.

Ardından, projeye Windows App SDK NuGet paketini yükleyeceğiz.

  1. Solution Explorer'da, project Dependencies düğümüne sağ tıklayın ve Nuget Paketlerini Yönet... öğesini seçin. .
  2. NuGet Package Manager penceresinde Browse sekmesini seçin ve Latest stableMicrosoft.WindowsAppSDK paketini yükleyin.

WinForms uygulamanızda bazı Windows App SDK özelliklerini kullanma

Bu bölüm, WinForms uygulamasından Windows App SDK API'lerini çağırmaya yönelik çok basit bir örnek sunar. MRT Core özelliğini kullanır (bkz. MRT Core ile kaynakları yönetme). Bu örnek WinForms project için çalışıyorsa (ve bu kılavuz için yeni bir tane oluşturduysanız, o zaman çalışır), bu adımları izleyebilirsiniz.

  1. Form1.cs Açın (Görünüm Tasarımcısı komutunu kullanarak) ve Buton ve Etiket öğelerini Araç Kutusu'ndan tasarımcıya sürükleyin.

  2. Olay işleyicisi oluşturmak için düğmesine 1 çift tıklayın.

  3. Şimdi dize kaynağını yüklemek için Windows App SDK ResourceManager sınıfını kullanan bazı kodlar ekleyeceğiz.

    1. Projenize yeni bir Resources Dosyası (.resw) öğesi ekleyin ve varsayılan adı olarak Resources.resw bırakın.

    2. Kaynak dosyası düzenleyicide açıkken aşağıdaki özelliklere sahip yeni bir dize kaynağı oluşturun.

      • Ad: İleti
      • Değer: Merhaba, kaynaklar!
    3. Kaynaklar dosyasını kaydedin ve kapatın.

    4. Dosyasını açın Form1.cs ( Kodu Görüntüle komutunu kullanarak) ve olay işleyicisini şöyle görünecek şekilde düzenleyin:

    private void button1_Click(object sender, EventArgs 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.
        label1.Text = manager.MainResourceMap.GetValue("Resources/Message").ValueAsString;
    }
    
  4. project oluşturun ve uygulamayı çalıştırın. Dize Hello, resources!'ı görüntülemek için düğmeye tıklayın.

Tavsiye

Çalışma zamanında uygulamanın Windows App Çalışma Zamanı'nın belirli bir sürümüne ihtiyacı olduğunu belirten bir ileti kutusu görürseniz ve şimdi yüklemek isteyip istemediğinizi sorarsanız Yes öğesine tıklayın. Bu sizi Windows App SDK için En son indirmelere götürecek. Daha fazla bilgi için yukarıdaki Önkoşullar bölümüne bakın.

Ayrıca uygulamanızın Windows App SDK kullandığında aldığı Framework paket bağımlılığı ve paketlenmemiş bir uygulamada çalışmak için gereken ek bileşenler hakkında daha fazla bilgi edinmek için bkz. Runtime architecture.

WINForms uygulamanızı MSIX ile paketleme ve dağıtma

Bazı Windows özellikleri ve API'leri (Windows App SDK notifications API'leri dahil) uygulamanızın çalışma zamanında package identity olmasını gerektirir (başka bir deyişle uygulamanızın packaged) olması gerekir. Daha fazla bilgi için bkz. Paket kimliği gerektiren özellikler.

  1. Visual Studio Solution Explorer'da çözüme sağ tıklayın ve Add>Yeni Project... öğesini seçin. .
  2. Yeni bir project ekle iletişim kutusunda packaging için arama yapın, C# Windows Uygulama Paketleme Project project şablonunu seçin ve İleri'e tıklayın.
  3. project adlandırın ve Oluştur öğesine tıklayın.
  4. Çözümdeki hangi uygulamaların pakete dahil edileceklerini belirtmek istiyoruz. Bu yüzden paketleme projesinde (not WinForms projesi), Dependencies düğümüne sağ tıklayın ve Proje Başvurusu Ekle... seçeneğini belirleyin.
  5. Çözümdeki projelerin listesinde WinForms project seçin ve OK öğesine tıklayın.
  6. Paketleme projesinin Dependencies>Applications düğümünü genişletin ve WinForms projenizin referans verildiğini ve kalın olarak vurgulandığını onaylayın. Bu, paketin başlangıç noktası olarak kullanılacağı anlamına gelir.
  7. Paketleme projesine sağ tıklayın ve Başlangıç Projesi Olarak Ayarla öğesini seçin.
  8. WinForms project sağ tıklayın ve Edit Project File öğesini seçin.
  9. Silin <WindowsPackageType>None</WindowsPackageType>, kaydedin ve kapatın.
  10. Çözüm Platformları açılan menüsünde, Herhangi bir CPUyerine, x64 seçin.
  11. Oluşturup çalıştırabileceğinizi onaylayın.

WinForms uygulamanızı paketlediğinize göre, paket kimliği gerektiren API'leri çağırabilirsiniz. Bu nedenle açın Form1.cs ( Kodu Görüntüle komutunu kullanarak) ve olay işleyicisini şöyle görünecek şekilde düzenleyin:

private void button1_Click(object sender, EventArgs 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);
}

Yeniden oluşturun ve çalıştırın. Düğmeye tıklayın ve kısa bir bildirim mesajı görüntülendiğini onaylayın. Çalışma zamanında paket kimliği olmayan bir işlemden çağrıldığında, bildirim API'leri bir istisna fırlatır.

Uyarı

Bu bölümdeki adımlarda paketlenmiş bir uygulamanın nasıl oluşturulacağı gösterilir. Alternatif olarak,dış konumuna sahip paketlenmiş bir uygulama oluşturabilirsiniz. Tüm bu terimleri hatırlatmak için bkz. Uygulamanızı paketlemenin avantajları ve dezavantajları.