【问题标题】:UWP ListView Drag item custom UIUWP ListView 拖拽项自定义UI
【发布时间】:2016-09-22 19:07:24
【问题描述】:

我正在使用 C# 构建 UWP 应用,但在为 ListView 进行拖放时,我无法自定义 Drag UI。

我正在使用 DragItemsStarting 对象来设置我要拖放的数据,但此事件不允许自定义 UI。

我已经添加了 DragStarting 但它没有被调用,所以我没有机会修改 Drag UI。

有人发现过这个问题吗? 关于在使用 ListView 时如何自定义 Drag UI 的任何想法?

【问题讨论】:

    标签: c# xaml visual-studio-2015 drag-and-drop uwp


    【解决方案1】:

    我不确定我是否理解您的正确情况以及您的特殊情况和要求,但我会在列表视图中使用默认的重新排序行为:

    <ListView x:Name="MyListView" ItemsSource="{Binding Items}" ReorderMode="Enabled" CanReorderItems="True" AllowDrop="True">
    ...
    </ListView>
    

    此代码允许您重新排序 ListView 中已存在的项目。要通过拖放添加新项目,您需要在 ListView 上订阅 Drop 事件,并将拖放的项目添加到您的项目集合中,该集合的类型应为 ObservableCollection&lt;YourItemType&gt; 并分配/绑定到 ListView.ItemsSource

    如果您仍需要自定义拖放的可视对象,则需要订阅此对象中的 DragStarting 事件并设置您想要的任何 UI 元素:

    private async void OnDragStarting(UIElement sender, DragStartingEventArgs args)
    {
        var deferral = args.GetDeferral();
        args.Data.Properties.Add("ItemViewModel", DataContext);
    
        var renderTargetBitmap = new RenderTargetBitmap();
        await renderTargetBitmap.RenderAsync(uiElementToDrag);
    
        var buffer = await renderTargetBitmap.GetPixelsAsync();
        var bitmap = SoftwareBitmap.CreateCopyFromBuffer(buffer,
            BitmapPixelFormat.Bgra8,
            renderTargetBitmap.PixelWidth,
            renderTargetBitmap.PixelHeight,
            BitmapAlphaMode.Premultiplied);
        args.DragUI.SetContentFromSoftwareBitmap(bitmap);
        deferral.Complete();
    }
    

    uiElementToDragUIElement 类型的可视可拖动元素。

    【讨论】:

    • 我的问题是,如果您设置 CanDragItems="true" 并且我需要使用 DragItemsStarting,则不会为 ListView 调用 DragStarting。
    【解决方案2】:

    也许您可以在ItemTemplate 上进行操作。

    <ListView>
        <ListView.ItemTemplate>
            <DataTemplate>
                <Grid Background="Transparent"
                      CanDrag="True"
                      DragStarting="onDragStarting">
                    <!--Content-->
                </Grid>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>
    

    【讨论】:

      猜你喜欢
      • 2019-09-09
      • 2015-12-07
      • 1970-01-01
      • 2019-06-10
      • 1970-01-01
      • 1970-01-01
      • 2017-05-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多