在之前的 C# 將內容、檔案拖曳至 WinForm 應用程式中 這篇文章有介紹 WinForms 的拖曳方式,但是在 WinUI3 中稍有不同,本篇來示範 WinUI3 的使用方式。
開啟一個新的 WinUI3 專案,在原先的 MainWindow.xaml 程式碼中加入一個新的 TextBox 元件,等等我們會讓文字資訊可以被拖曳到此輸入框中:
在 MainWindow.xaml.cs 中,只有三個步驟要做:
開啟一個新的 WinUI3 專案,在原先的 MainWindow.xaml 程式碼中加入一個新的 TextBox 元件,等等我們會讓文字資訊可以被拖曳到此輸入框中:
<?xml version="1.0" encoding="utf-8"?>
<Window
x:Class="WinUi3Test0309.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d">
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center">
<Button x:Name="myButton" Click="myButton_Click">Click Me</Button>
<TextBox x:Name="MyTextBox"></TextBox>
</StackPanel>
</Window>
在 MainWindow.xaml.cs 中,只有三個步驟要做:
- 允許 Drop
- 在 DragOver 事件中判斷來源資料型態(在 WinForms 中是 DragEnter)
- 在 Drop 中處理資料
MyTextBox.AllowDrop = true;
MyTextBox.DragOver += (sender, args) =>
{
// 判斷是否是文字
if (args.DataView.Contains(StandardDataFormats.Text))
{
args.AcceptedOperation = Windows.ApplicationModel.DataTransfer.DataPackageOperation.Copy;
}
};
MyTextBox.Drop += (sender, args) =>
{
if (!args.DataView.Contains(StandardDataFormats.Text)) return;
var deferral = args.GetDeferral();
var text = args.DataView.GetTextAsync().AsTask().Result;
MyTextBox.Text = text;
deferral.Complete(); // 不加這個介面會卡在拖曳狀態
};
留言
張貼留言
如果有任何問題、建議、想說的話或文章題目推薦,都歡迎留言或來信: a@ruyut.com