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.
Bazı seçiciler, açılır pencereler, iletişim kutuları ve diğer Windows Çalışma Zamanı (WinRT) nesneleri CoreWindow'a bağlıdır; genellikle bir kullanıcı arabirimi (UI) görüntülemek için. CoreWindow masaüstü uygulamalarında desteklenmese de (bkz. Çekirdek desteklenmeyen sınıflar), biraz birlikte çalışma kodu ekleyerek bu WinRT sınıflarının çoğunu masaüstü uygulamanızda kullanmaya devam edebilirsiniz.
Masaüstü uygulamanız WinUI 3, Windows Presentation Foundation (WPF) veya Windows Forms (WinForms) uygulamaları olabilir. Kod örnekleri C# ve C++/WinRT'de sunulur.
WinRT UI nesnesi için sahip pencere tutamacını (HWND) ayarlama
IInitializeWithWindow arabirimini (veya eşdeğer IDataTransferManagerInterop arabirimini) uygulayan sınıflar için, görüntülemeden önce nesne üzerinde sahip penceresi ayarlamak için bu arabirimi kullanabilirsiniz. bu iki adımlı bir işlemdir.
- Görüntülemek istediğiniz kullanıcı arabirimi nesnesinin sahibi olacak pencereye karar verin ve bu pencerenin HWND değerini alın. Bu adımla ilgili diğer ayrıntılar ve kod örnekleri için bkz. Pencere tutamacını alma (HWND).
- Ardından, WinRT UI nesnesi için sahip pencere tutamacını (HWND) ayarlamak üzere uygun birlikte çalışabilirlik API'sini (C# veya C++/WinRT için) çağırın.
IInitializeWithWindow uygulayan sınıflar için
Bu sınıflar IInitializeWithWindow uygular:
- Windows.ApplicationModel.Contacts.PinnedContactManager
- Windows.ApplicationModel.Payments.PaymentMediator
- Windows.Devices.Enumeration.DevicePicker
- Windows.Graphics.Capture.GraphicsCapturePicker
- Windows.Media.Casting.CastingDevicePicker
- Windows.Media.DialProtocol.DialDevicePicker
- Windows.Networking.NetworkOperators.ProvisioningAgent
- Windows.Security.Authentication.OnlineId.OnlineIdAuthenticator
- Windows.Services.Store.StoreContext
- Windows.Storage.Pickers.FileOpenPicker
- Windows.Storage.Pickers.FileSavePicker
- Windows.Storage.Pickers.FolderPicker
- Windows.System.FolderLauncherOptions—Windows 10, sürüm 1903 (10.0; Derleme 18362) ve üzeri
- Windows.System.LauncherOptions—Windows 10, sürüm 1903 (10.0; Derleme 18362) ve üzeri
- Windows.UI.Core.CoreWindowDialog
- Windows.UI.Core.CoreWindowFlyout
- Windows.UI.Popups.MessageDialog. Ancak yeni uygulamalar için bunun yerine ContentDialog denetimini kullanmanızı öneririz.
- Windows.UI.Popups.PopupMenu
- Windows.UI.StartScreen.SecondaryTile
- Windows.Web.Http.Filters.HttpBaseProtocolFilter
Uyarı
Yukarıdaki liste mutlaka eksik olmalıdır; IInitializeWithWindow (veya eşdeğer bir birlikte çalışma arabirimi) uygulayıp uygulamadığını görmek için bir türün belgelerine bakın.
Sonraki bölümlerde FolderPicker'ı görüntülemek için kod örnekleri yer alır. Ancak yukarıda listelenen API'lerden herhangi birini görüntülemek aynı tekniktir.
C# ile WinUI 3 (.NET 6 ve sonrası için WPF/WinForms dahil)
Uyarı
Bu bölümdeki kod örnekleri WinRT.Interop.WindowNative C# birlikte çalışma sınıfını kullanır. .NET 6 veya sonraki bir sürümü hedeflerseniz, bu sınıfı bir WPF veya WinForms projesinde kullanabilirsiniz. Projenizi bunu yapacak şekilde ayarlama hakkında bilgi için bkz. .NET uygulamasından birlikte çalışma API'lerini çağırma.
Aşağıdaki C# kodu , Pencere tutamacını alma (HWND) bölümünde belgelenen deseni zaten kullandığınızı bekler. Ardından, görüntülemek istediğiniz ui nesnesinin sahip penceresini ayarlamak için kod, WinRT.Interop.InitializeWithWindow C# birlikte çalışma sınıfında Initialize yöntemini çağırır. C# birlikte çalışma sınıfları hakkında daha fazla bilgi için bkz. .NET uygulamasından birlikte çalışma API'lerini çağırma.
// MainWindow.xaml.cs
private async void ShowFolderPickerAsync(IntPtr hWnd)
{
// Create a folder picker.
var folderPicker = new Windows.Storage.Pickers.FolderPicker();
// Initialize the folder picker with the window handle (HWND).
WinRT.Interop.InitializeWithWindow.Initialize(folderPicker, hWnd);
// Use the folder picker as usual.
folderPicker.FileTypeFilter.Add("*");
var folder = await folderPicker.PickSingleFolderAsync();
}
C++ ile WinUI 3
Aşağıdaki C++/WinRT kodu , Pencere tutamacını alma (HWND) bölümünde belgelenen deseni zaten kullandığınızı bekler. Ardından, görüntülemek istediğiniz UI nesnesinin sahip penceresini ayarlamak için kod , IInitializeWithWindow::Initialize birlikte çalışabilirlik yöntemini çağırır.
// pch.h
...
#include <microsoft.ui.xaml.window.h>
#include <Shobjidl.h>
#include <winrt/Windows.Storage.Pickers.h>
// MainWindow.xaml.cpp
winrt::fire_and_forget ShowFolderPickerAsync(HWND hWnd)
{
// Create a folder picker.
Windows::Storage::Pickers::FolderPicker folderPicker;
// Initialize the folder picker with the window handle (HWND).
auto initializeWithWindow{ folderPicker.as<::IInitializeWithWindow>() };
initializeWithWindow->Initialize(hWnd);
// Use the folder picker as usual.
folderPicker.FileTypeFilter().Append(L"*");
auto folder{ co_await folderPicker.PickSingleFolderAsync() };
}
IDataTransferManagerInterop uygulayan sınıflar için
Windows.ApplicationModel.DataTransfer.DataTransferManager sınıfı IDataTransferManagerInterop arabirimini uygular (IInitializeWithWindow gibi bir sahip penceresi ayarlamanıza olanak tanır).
Bir masaüstü uygulamasında, DataTransferManager.ShowShareUI yöntemini çağırmak yerine, aşağıdaki kod örneklerinde gösterildiği gibi IDataTransferManagerInterop::ShowShareUIForWindow'u çağırırsınız.
C# ile WinUI 3 (.NET 6 ve daha yenisi ile hem WPF hem de WinForms)
// MainWindow.xaml.cs
...
public sealed partial class MainWindow : Window
{
...
[System.Runtime.InteropServices.ComImport]
[System.Runtime.InteropServices.Guid("3A3DCD6C-3EAB-43DC-BCDE-45671CE800C8")]
[System.Runtime.InteropServices.InterfaceType(
System.Runtime.InteropServices.ComInterfaceType.InterfaceIsIUnknown)]
interface IDataTransferManagerInterop
{
IntPtr GetForWindow([System.Runtime.InteropServices.In] IntPtr appWindow,
[System.Runtime.InteropServices.In] ref Guid riid);
void ShowShareUIForWindow(IntPtr appWindow);
}
static readonly Guid _dtm_iid =
new Guid(0xa5caee9b, 0x8708, 0x49d1, 0x8d, 0x36, 0x67, 0xd2, 0x5a, 0x8d, 0xa0, 0x0c);
private void myButton_Click(object sender, RoutedEventArgs e)
{
// Retrieve the window handle (HWND) of the current WinUI 3 window.
var hWnd = WinRT.Interop.WindowNative.GetWindowHandle(this);
IDataTransferManagerInterop interop =
Windows.ApplicationModel.DataTransfer.DataTransferManager.As
<IDataTransferManagerInterop>();
IntPtr result = interop.GetForWindow(hWnd, _dtm_iid);
var dataTransferManager = WinRT.MarshalInterface
<Windows.ApplicationModel.DataTransfer.DataTransferManager>.FromAbi(result);
dataTransferManager.DataRequested += (sender, args) =>
{
args.Request.Data.Properties.Title = "In a desktop app...";
args.Request.Data.SetText("...display WinRT UI objects that depend on CoreWindow.");
args.Request.Data.RequestedOperation =
Windows.ApplicationModel.DataTransfer.DataPackageOperation.Copy;
};
// Show the Share UI
interop.ShowShareUIForWindow(hWnd);
}
}
...
C++ ile WinUI 3
// pch.h in a Windows App SDK app
...
#include <shobjidl_core.h>
#include <microsoft.ui.xaml.window.h>
#include <winrt/Windows.ApplicationModel.DataTransfer.h>
...
// MainWindow.xaml.cpp
...
void MainWindow::myButton_Click(IInspectable const&, RoutedEventArgs const&)
{
// Retrieve the window handle (HWND) of the current WinUI 3 window.
auto windowNative{ this->m_inner.as<::IWindowNative>() };
HWND hWnd{ 0 };
windowNative->get_WindowHandle(&hWnd);
winrt::com_ptr<IDataTransferManagerInterop> interop =
winrt::get_activation_factory<Windows::ApplicationModel::DataTransfer::DataTransferManager,
IDataTransferManagerInterop>();
winrt::guid _dtm_iid{ 0xa5caee9b, 0x8708, 0x49d1, { 0x8d, 0x36, 0x67, 0xd2, 0x5a, 0x8d, 0xa0, 0x0c } };
Windows::ApplicationModel::DataTransfer::DataTransferManager dataTransferManager{ nullptr };
interop->GetForWindow(hWnd, _dtm_iid, winrt::put_abi(dataTransferManager));
dataTransferManager.DataRequested([](Windows::ApplicationModel::DataTransfer::DataTransferManager const& /* sender */,
Windows::ApplicationModel::DataTransfer::DataRequestedEventArgs const& args)
{
args.Request().Data().Properties().Title(L"In a desktop app...");
args.Request().Data().SetText(L"...display WinRT UI objects that depend on CoreWindow.");
args.Request().Data().RequestedOperation(Windows::ApplicationModel::DataTransfer::DataPackageOperation::Copy);
});
interop->ShowShareUIForWindow(hWnd);
}
...
IUserConsentVerifierInterop uygulayan sınıflar için
Windows.Security.Credentials.UI.UserConsentVerifier sınıfı, IUserConsentVerifierInterop arabirimini uygular (IInitializeWithWindow gibi bir sahip penceresi ayarlamanıza olanak tanır).
Bir masaüstü uygulamasında UserConsentVerifier.RequestVerificationAsync yöntemini çağırmak yerine:
- C#. Windows.Security.Credentials.UI.UserConsentVerifierInterop C# birlikte çalışma sınıfının RequestVerificationForWindowAsync yöntemini çağırın. C# birlikte çalışma sınıfları hakkında daha fazla bilgi için bkz. .NET uygulamasından birlikte çalışma API'lerini çağırma.
- C++/WinRT . IUserConsentVerifierInterop::RequestVerificationForWindowAsync çağrısı.
Daha fazla bilgi ve kod örnekleri için bkz. UserConsentVerifier.
Diğer birlikte çalışma arabirimlerini uygulayan sınıflar için
Bu arabirimler, sahip pencere tutamacını (HWND) ayarlamanıza olanak tanıyan XxxForWindow yöntemlerine sahiptir. Bu arabirimleri doğrudan C++/WinRT'den kullanabilirsiniz. Arabirimlerin sürümleri C# sınıfları biçiminde de mevcuttur. Daha fazla ayrıntı için bkz. .NET uygulamasından birlikte çalışma API'lerini çağırma.
- IAccountsSettingsPaneInterop
- IDragDropManagerInterop
- IInputPaneInterop
- IPlayToManagerInterop
- IPrintManagerInterop
- IRadialControllerConfigurationInterop
- IRadialControllerIndependentInputSourceInterop
- IRadialControllerInterop
- ISpatialInteractionManagerInterop
- ISystemMediaTransportControlsInterop
- IUIViewSettingsInterop
- IWebAuthenticationCoreManagerInterop
İlgili konular
Windows developer