You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

UWP C#中能否从ListView跨应用拖拽字符串数据至记事本等应用?

实现UWP ListViewItem跨应用文本拖拽

当然没问题!在UWP C#开发场景下,你完全可以实现从ListView控件拖拽带有目标字符串的ListViewItem,将文本数据传递到记事本这类支持文本输入的跨应用控件中。和文件拖拽的核心逻辑类似,只是需要把拖拽的数据格式换成文本类型就行,下面是具体的实现步骤:

1. 配置ListView的拖拽触发事件

首先在XAML中给你的ListView绑定DragItemsStarting事件,这个事件会在用户开始拖拽ListViewItem时触发:

<ListView x:Name="TextListView" DragItemsStarting="TextListView_DragItemsStarting">
    <ListView.ItemTemplate>
        <DataTemplate>
            <!-- 这里假设你的Item是字符串,用TextBlock显示 -->
            <TextBlock Text="{Binding}" Margin="8"/>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

2. 在事件处理中设置文本拖拽数据

在后台C#代码里,处理DragItemsStarting事件,提取ListViewItem中的目标字符串,然后将其添加到DataPackage中(这是UWP拖拽操作的核心数据容器):

private void TextListView_DragItemsStarting(object sender, DragItemsStartingEventArgs e)
{
    // 获取拖拽的第一个Item(如果支持多选,可以循环处理所有选中项)
    var draggedItem = e.Items.FirstOrDefault();
    if (draggedItem is string targetText)
    {
        // 向DataPackage添加文本格式的数据
        e.Data.SetText(targetText);
        // 指定拖拽操作类型:跨应用推荐用Copy,Move在跨场景下兼容性差
        e.Data.RequestedOperation = DataPackageOperation.Copy;
    }
}

关键注意点

  • 如果你的ListView绑定的是自定义实体类(不是直接的字符串),只需要把代码里的类型判断改成你的实体类,然后提取对应的字符串属性即可。比如:
    if (draggedItem is MyDataModel model)
    {
        e.Data.SetText(model.TargetStringProperty);
    }
    
  • 测试时确保UWP应用处于运行状态,直接拖拽ListViewItem到记事本、Word或浏览器输入框等控件上,这些控件默认支持接收文本格式的拖拽数据。
  • 要是需要自定义拖拽时的视觉反馈,可以通过e.DragUI属性添加自定义图标或预览内容,但基础的文本拖拽不需要额外配置就能正常工作。

内容的提问来源于stack exchange,提问作者Ash-Bash32

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:20:58