Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
C#/WinRT, WinUI özel türleri ve özel denetimler dahil olmak üzere Windows Çalışma Zamanı bileşenleri yazma desteği sağlar. Bu bileşenler, Windows Uygulama SDK'sı kullanan C# veya C++/WinRT uygulamalarından kullanılabilir. NuGet paketleme desteğiyle çalışma zamanı bileşenlerini yazmak için C#/WinRT v1.6.4 veya üzerini kullanmanızı öneririz.
Desteklenen senaryolar hakkında daha fazla ayrıntı için C#/WinRT GitHub deposunda Authoring C#/WinRT bileşenleri bölümüne bakın.
Bu izlenecek yol, özel bir WinUI denetimiyle bir C# bileşeninin nasıl yazıldığını ve Windows Uygulama SDK'sı proje şablonlarını kullanarak bir C++/WinRT uygulamasından bu bileşenin nasıl kullanıldığını gösterir.
Önkoşullar
Bu izlenecek yol için aşağıdaki araçlar ve bileşenler gerekir:
- Visual Studio 2022 veya üzeri
- .NET 8.0 SDK (LTS) veya üzeri
- Windows Uygulama SDK'sı VSIX (1.1 kararlı kanaldan)
Windows Uygulama SDK'sı kullanarak C#/WinRT bileşeninizi yazma
Windows Uygulama SDK'sı tarafından sağlanan Class Kitaplığı (Masaüstünde WinUI) şablonunu kullanarak yeni bir C# kitaplık projesi oluşturun. Bu kılavuzda kitaplık projesini WinUIComponentCs ve çözümü AuthoringWinUI olarak adlandırdık.
Çözüm ve projeyi aynı dizine yerleştir kutusunun işaretini kaldırın (aksi takdirde, önceki bölümdeki C++ uygulaması için kullanılan
packagesklasörü, C# kütüphane projesi ile çakışacaktır).
Class1.csVarsayılan olarak eklenen dosyayı silin.Projenize en son Microsoft.Windows.CsWinRT NuGet paketini yükleyin.
i. Çözüm Gezgini'da proje düğümüne sağ tıklayın ve NuGet Paketlerini Yönet öğesini seçin.
ii. Microsoft.Windows.CsWinRT NuGet paketini arayın ve en son sürümünü yükleyin.
Proje kitaplığınıza aşağıdaki özellikleri ekleyin.
<PropertyGroup> <CsWinRTComponent>true</CsWinRTComponent> </PropertyGroup>-
CsWinRTComponentözelliği, projeniz derlendiğinde bir.winmddosyası oluşturulabilmesi için projenizin bir Windows Çalışma Zamanı bileşeni olduğunu belirtir.
-
Kitaplığınıza özel denetim veya kullanıcı denetimi ekleyin. Bunu yapmak için Visual Studio'da projenize sağ tıklayın, Add>Yeni Öğe'ye tıklayın ve sol bölmede WinUI öğesini seçin. Bu izlenecek yol için yeni bir Kullanıcı Denetimi (WinUI) ekledik ve adını verdik
NameReporter.xaml. NameReporter kullanıcı denetimi, kullanıcının uygun TextBox denetimine bir ad ve soyadı girmesini ve bir düğmeye tıklamasını sağlar. Ardından kontrol, kullanıcının girdiği ad ile bir ileti kutusu görüntüler.Dosyaya aşağıdaki kodu yapıştırın
NameReporter.xaml:<UserControl x:Class="WinUIComponentCs.NameReporter" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="using:WinUIComponentCs" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d"> <StackPanel HorizontalAlignment="Center"> <StackPanel.Resources> <Style x:Key="BasicTextStyle" TargetType="TextBlock" BasedOn="{StaticResource BodyTextBlockStyle}"> <Setter Property="Margin" Value="10,10,10,10"/> </Style> </StackPanel.Resources> <TextBlock Text="Enter your name." Margin="0,0,0,10"/> <StackPanel Orientation="Horizontal" Margin="0,0,0,10"> <TextBlock Style="{StaticResource BasicTextStyle}"> First Name: </TextBlock> <TextBox Name="firstName" /> </StackPanel> <StackPanel Orientation="Horizontal" Margin="0,0,0,10"> <TextBlock Style="{StaticResource BasicTextStyle}"> Last Name: </TextBlock> <TextBox Name="lastName" /> </StackPanel> <Button Content="Submit" Click="Button_Click" Margin="0,0,0,10"/> <TextBlock Name="result" Style="{StaticResource BasicTextStyle}" Margin="0,0,0,10"/> </StackPanel> </UserControl>aşağıdaki yöntemi içine
NameReporter.xaml.csekleyin:using System.Text; ... private void Button_Click(object sender, RoutedEventArgs e) { StringBuilder displayText = new StringBuilder("Hello, "); displayText.AppendFormat("{0} {1}.", firstName.Text, lastName.Text); result.Text = displayText.ToString(); }Artık bileşen için bir dosyası oluşturmak için
.winmdproject oluşturabilirsiniz.
Uyarı
Ayrıca, bileşeni son uygulama tüketicilerinin başvurabileceği bir NuGet paketi olarak da paketleyebilirsiniz. Daha fazla ayrıntı için C#/WinRT GitHub deposunda Authoring C#/WinRT bileşenleri bölümüne bakın.
Windows Uygulama SDK'sı C++/WinRT uygulamasından bileşene başvurma
Aşağıdaki adımlar, bir C++/WinRT Windows Uygulama SDK'sı uygulamasından önceki bölümde oluşturulan bileşenin nasıl tüketileceğini gösterir. C++'tan bir C#/WinRT bileşeni kullanmak için şu anda tek projeli WinUI Boş Uygulaması (Paketlenmiş) şablonunun kullanılması gerekir. C# bileşenlerine, sınıf kayıtları olmadan C# paketlenmiş uygulamalardan da başvurulabileceğini unutmayın.
Ayrı bir Windows Uygulama Paketleme (WAP) projesi kullanan paketlenmiş uygulamalardan tüketim şu anda desteklenmiyor. Desteklenen proje yapılandırmalarıyla ilgili en son güncelleştirmeler için C#/WinRT bileşenleri
Çözümünüze yeni bir C++ Windows Uygulama SDK'sı uygulama projesi ekleyin. Visual Studio'da çözümünüze sağ tıklayın ve Add>Yeni Project öğesini seçin. Windows Uygulama SDK'sı tarafından sağlanan C++ WinUI Boş Uygulaması (Paketlenmiş) şablonunu seçin. Bu rehber için uygulamaya CppAppad verdik.
C++ uygulamasından C# bileşenine bir proje referansı ekleyin. Visual Studio'da C++ projesine sağ tıklayın ve Add>Reference öğesini seçin ve WinUIComponentCs projesini seçin.
Uyarı
Bileşenleri, bazı sınırlamalarla birlikte NuGet paket referansı olarak kullanmak desteklenmektedir. Yani, özel kullanıcı denetimlerine sahip bileşenler şu anda NuGet paket başvurusu olarak kullanılamaz.
Uygulamanın
pch.hüst bilgi dosyasına aşağıdaki satırları ekleyin:#include <winrt/WinUIComponentCs.h> #include <winrt/WinUIComponentCs.WinUIComponentCs_XamlTypeInfo.h>paket bildirim dosyasını açın.
Package.appxmanifestUyarı
Package.appxmanifestdosyasının Visual Studio Çözüm Gezgini görünmemesiyle ilgili bilinen bir sorun vardır. Bunu aşmak için, C++ projesine sağ tıklayın, Projeyi Yüklemeyi Seç seçeneğini seçin ve projeye çift tıklayarakCppApp.vcxprojdosyasını açın. project dosyasına aşağıdaki girdiyi ekleyin ve project yeniden yükleyin:<ItemGroup> <AppxManifest Include="Package.appxmanifest"> <SubType>Designer</SubType> </AppxManifest> </ItemGroup>Package.appxmanifestiçine aşağıdaki etkinleştirilebilir sınıf kayıtlarını ekleyin.ActivatableClasssınıfı için WinUIComponentCs.WinUIComponentCs_XamlTypeInfo.XamlMetaDataProvider sınıfına ilişkin bir giriş daha eklemeniz gerekecek ki WinUI türlerini etkinleştirebilirsiniz. Dosyayı düzenlemek için dosyayaPackage.appxmanifestsağ tıklayın ve XML ile> Aç(Metin Düzenleyicisi) seçeneğini belirleyin.<!--In order to host the C# component from C++, you must add the following Extension group and list the activatable classes--> <Extensions> <Extension Category="windows.activatableClass.inProcessServer"> <InProcessServer> <Path>WinRT.Host.dll</Path> <ActivatableClass ActivatableClassId="WinUIComponentCs.NameReporter" ThreadingModel="both" /> <ActivatableClass ActivatableClassId="WinUIComponentCs.WinUIComponentCs_XamlTypeInfo.XamlMetaDataProvider" ThreadingModel="both" /> </InProcessServer> </Extension> </Extensions>MainWindow.xamldosyasını açın.i. Dosyanın en üstüne bileşenin ad alanına bir başvuru ekleyin.
xmlns:custom="using:WinUIComponentCs"ii. Mevcut XAML koduna kullanıcı denetimini ekleyin.
<StackPanel> ... <custom:NameReporter/> </StackPanel>Başlangıç projesi olarak CppApp'i ayarlayın. CppApp'e sağ tıklayın ve Başlangıç Projesi Olarak Ayarla seçeneğini seçin. Çözüm yapılandırmasını olarak
x86ayarlayın. Derlemeden önce, Visual Studio 2026 derleme araçlarıyla derlemek için çözümünüzü yeniden hedeflemeniz gerekebilir. Çözüme sağ tıklayın, Solution'uyeniden hedefleyin ve Platform Araç Seti'ni v143olarak yükseltin.Özel NameReporter denetimini görmek için uygulamayı derleyin ve çalıştırın.
Bilinen sorunlar
- C# bileşenini project başvurusu olarak kullanmak için
PublishReadyToRundeğerininFalseolarak ayarlanması gerekir. Diğer ayrıntılar için bkz. GitHub Sorun #1151. - Şu anda C++ üzerinden
AnyCPUiçin oluşturulmuş bir C# bileşeni yalnızcax86uygulamalarından kullanılabilir.x64veArm64uygulamaları şuna benzer bir çalışma zamanı hatasıyla sonuçlanır: %1 geçerli bir Win32 uygulaması değil. Daha fazla bilgi için bkz. GitHub Sorunu #1093.
İlgili konular
Windows developer