UWP向网格中的多个单元格添加拖放操作

时间:2018-08-15 12:22:47

标签: c# xaml uwp windows-10-universal

我想用UWP(通用Windows平台)构建一个应用程序。 通过一个应用程序,我想实现“拖放”功能。 我使用了一些名为“ AllowDrop”和“ DragOver”的属性。 但我遇到了网格或某些xaml层次结构的问题。

当我将任何文件拖放到应用程序时,无论其在任何位置,我都希望应用程序接受它。 但存在未知问题,该应用仅接受文件的特定区域。 希望以下图片可以帮助您了解我所遇到的问题。 my Intent(left) but It works(right)

下面是源代码(一个是xaml源,一个是csharp)。

<Page 
    x:Class="eeee_textRandomizeUWP.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:eeee_textRandomizeUWP"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">

    <Grid AllowDrop="True" DragOver="Grid_DragOver">
        <Grid.RowDefinitions>
            <RowDefinition Height="6*"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="3*"/>
            <ColumnDefinition Width="*"/>
        </Grid.ColumnDefinitions>
        <StackPanel>

            <TextBlock Text="파일을 올려주세요" FontSize="{ThemeResource ListViewHeaderItemThemeFontSize}" Margin="20, 0, 0, 0"/>
            <ListView Name="MainFileList">
                <ListViewItem>
                    <StackPanel Orientation="Horizontal">
                       <TextBlock Text="&#xE8E5;" FontFamily="Segoe MDL2 Assets" /> 
                    </StackPanel>
                </ListViewItem>
            </ListView>

        </StackPanel> 
    </Grid>

</Page>

以下来源是csharp

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices.WindowsRuntime;
using Windows.Foundation;
using Windows.Foundation.Collections;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Navigation;

// 빈 페이지 항목 템플릿에 대한 설명은 https://go.microsoft.com/fwlink/?LinkId=402352&clcid=0x412에 나와 있습니다.

namespace eeee_textRandomizeUWP
{
    /// <summary>
    /// 자체적으로 사용하거나 프레임 내에서 탐색할 수 있는 빈 페이지입니다.
    /// </summary>
    public sealed partial class MainPage : Page
    {
        public MainPage()
        {
            this.InitializeComponent();
        }

        private void MainFileList_DragOver(object sender, DragEventArgs e)
        {
        }

        private void Grid_DragOver(object sender, DragEventArgs e)
        {
            e.AcceptedOperation = Windows.ApplicationModel.DataTransfer.DataPackageOperation.Copy;

            e.DragUIOverride.Caption = "드래그 앤 드롭을 하여 파일을 등록해주세요";
            e.DragUIOverride.IsCaptionVisible = true;
            e.DragUIOverride.IsContentVisible = true;
            e.DragUIOverride.IsGlyphVisible = true;

        }
    }
}

我认为Csharp部分没有问题,但xaml部分没有问题。 我想知道,即使我向其中添加拖动动作,它也只能使用一个网格单元 从字面上看是“主网格”。 我说过,拖放仅适用于一个网格单元。但是当我考虑像元的高度时,有效区域太小。

当我发现此问题时,我将操作移至“页面”标签。但其作用与“ Grid”标签中的操作相同。我不知道我怎么了。

2 个答案:

答案 0 :(得分:0)

它在Grid标记中不起作用,因为您有另一个框覆盖它,因此您将任何东西拖到另一层上方,而不是网格本身。

答案 1 :(得分:0)

我最终得到了这个消息。只需在grid标签的末尾添加canvas标签。我仍然想知道为什么我要这样做。但它有效。不要减去“画布”的“背景”设置。

<Page 
    x:Class="eeee_textRandomizeUWP.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:eeee_textRandomizeUWP"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">

    <Grid >
        <Grid.RowDefinitions>
            <RowDefinition Height="6*"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="3*"/>
            <ColumnDefinition Width="*"/>
        </Grid.ColumnDefinitions>

        <StackPanel>
            <TextBlock Text="파일을 올려주세요" FontSize="{ThemeResource ListViewHeaderItemThemeFontSize}" Margin="20, 0, 0, 0"/>
            <ListView Name="MainFileList">
                <ListViewItem>
                    <StackPanel Orientation="Horizontal">
                       <TextBlock Text="&#xE8E5;" FontFamily="Segoe MDL2 Assets" /> 
                    </StackPanel>
                </ListViewItem>
                <ListViewItem>
                    <StackPanel Orientation="Horizontal">
                       <TextBlock Text="&#xE8E5;" FontFamily="Segoe MDL2 Assets" /> 
                    </StackPanel>
                </ListViewItem>
                <ListViewItem>
                    <StackPanel Orientation="Horizontal">
                       <TextBlock Text="&#xE8E5;" FontFamily="Segoe MDL2 Assets" /> 
                    </StackPanel>
                </ListViewItem>
            </ListView>

        </StackPanel>

        <ListView Grid.Column="1">
            <ListViewItem>
                    <StackPanel Orientation="Horizontal">
                       <TextBlock Text="&#xE8E5;" FontFamily="Segoe MDL2 Assets" /> 
                    </StackPanel>
            </ListViewItem>
            <ListViewItem>
                    <StackPanel Orientation="Horizontal">
                       <TextBlock Text="&#xE8E5;" FontFamily="Segoe MDL2 Assets" /> 
                    </StackPanel>
            </ListViewItem>

            <ListViewItem>
                    <StackPanel Orientation="Horizontal">
                       <TextBlock Text="&#xE8E5;" FontFamily="Segoe MDL2 Assets" /> 
                    </StackPanel>
            </ListViewItem>
        </ListView>

        <Canvas 
            Background="Transparent"
            Grid.RowSpan="2" 
            Grid.ColumnSpan="2" 
            AllowDrop="True" 
            DragOver="Grid_DragOver" 
            >
        </Canvas>

    </Grid>
</Page>