我想用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="" 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”标签中的操作相同。我不知道我怎么了。
答案 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="" FontFamily="Segoe MDL2 Assets" />
</StackPanel>
</ListViewItem>
<ListViewItem>
<StackPanel Orientation="Horizontal">
<TextBlock Text="" FontFamily="Segoe MDL2 Assets" />
</StackPanel>
</ListViewItem>
<ListViewItem>
<StackPanel Orientation="Horizontal">
<TextBlock Text="" FontFamily="Segoe MDL2 Assets" />
</StackPanel>
</ListViewItem>
</ListView>
</StackPanel>
<ListView Grid.Column="1">
<ListViewItem>
<StackPanel Orientation="Horizontal">
<TextBlock Text="" FontFamily="Segoe MDL2 Assets" />
</StackPanel>
</ListViewItem>
<ListViewItem>
<StackPanel Orientation="Horizontal">
<TextBlock Text="" FontFamily="Segoe MDL2 Assets" />
</StackPanel>
</ListViewItem>
<ListViewItem>
<StackPanel Orientation="Horizontal">
<TextBlock Text="" FontFamily="Segoe MDL2 Assets" />
</StackPanel>
</ListViewItem>
</ListView>
<Canvas
Background="Transparent"
Grid.RowSpan="2"
Grid.ColumnSpan="2"
AllowDrop="True"
DragOver="Grid_DragOver"
>
</Canvas>
</Grid>
</Page>