C# UWP将拖放操作添加到多个网格单元

C# UWP将拖放操作添加到多个网格单元,c#,xaml,uwp,windows-10-universal,C#,Xaml,Uwp,Windows 10 Universal,我想用UWP(通用windows平台)构建一个应用程序。 对于一个应用程序,我想实现一个“拖放”功能。 我使用了一些名为“AllowDrop”和“DragOver”的属性。 但我遇到了网格或一些xaml层次结构的问题 当我将任何文件拖放到一个应用程序中,它的任何位置,我希望一个应用程序接受它。 但由于存在未知问题,应用程序只接受文件的特定区域。 我希望下面的图片能帮助你们理解我遇到的问题。 下面是源代码(一个是xaml源代码,在一个是csharp之后) 以下来源是csharp using

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

当我将任何文件拖放到一个应用程序中,它的任何位置,我希望一个应用程序接受它。 但由于存在未知问题,应用程序只接受文件的特定区域。 我希望下面的图片能帮助你们理解我遇到的问题。

下面是源代码(一个是xaml源代码,在一个是csharp之后)


以下来源是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;

        }
    }
}
使用系统;
使用System.Collections.Generic;
使用System.IO;
使用System.Linq;
使用System.Runtime.InteropServices.WindowsRuntime;
使用Windows基金会;
使用Windows。
使用Windows.UI.Xaml;
使用Windows.UI.Xaml.Controls;
使用Windows.UI.Xaml.Controls.Primitives;
使用Windows.UI.Xaml.Data;
使用Windows.UI.Xaml.Input;
使用Windows.UI.Xaml.Media;
使用Windows.UI.Xaml.Navigation;
// 빈 페이지 항목 템플릿에 대한 설명은 https://go.microsoft.com/fwlink/?LinkId=402352&clcid=0x412에 나와 있습니다.
名称空间eeee_textRandomizeUWP
{
/// 
/// 자체적으로 사용하거나 프레임 내에서 탐색할 수 있는 빈 페이지입니다.
/// 
公共密封部分类主页面:第页
{
公共主页()
{
this.InitializeComponent();
}
私有void MainFileList\u DragOver(对象发送方,DragEventArgs e)
{
}
私有无效网格(对象发送方,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部分没有问题。 我想知道,即使我添加了拖动操作,它也只能在一个网格单元上工作 “主网格”字面意思是。 我说拖放只不过是网格的一个单元,但是当我考虑单元格的高度时,有效区域太小了。
当我发现这个问题时,我把我的动作移到了“页面”标签上,但它的工作原理与“网格”中的动作相同“标签。我不知道我的问题是什么。

它在网格标记中不起作用,因为你有另一个框覆盖它,所以你在另一层上拖动任何东西,而不是网格本身。

我最终得到了这个源代码。只需在网格标记的末尾添加画布标记。我仍然想知道我为什么要这样做。但它是有效的。不要减去画布的背景设置

<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>


我不这么认为。根据您的建议-上面的其他层(Grid.Row=0、.Col=1、Grid.Row=1、Col=1、Grid.Row=1、Col=0)不应正常工作。但事实并非如此。通过一些测试,我认为它与“网格”有关。只需一个网格检查文本块-当其高度和宽度未设置时,默认情况下,他会选择网格的大小,您将拖入其中。我感谢您的好意。但我仍然想知道我不理解的缺失部分。你能用我原来的csharp源代码检查下面的xaml源代码吗?。为什么它不起作用?只有一个网格Xaml。实际上我用asterik设置了一个网格大小。即使我将网格的高度和宽度设置为常量,它也不起作用。哦,对不起,我错了,你不能在网格内放置任何东西;但是您需要创建一个画布或GridView来放置您想要的任何内容,但是网格本身应该包括
AllowDrop=“true”
,请在此处阅读更多相关内容:
<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>