Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# UWP:-如何在拖动项目时创建拖动UI(指示项目要放置的位置)?_C#_Xaml_Uwp - Fatal编程技术网

C# UWP:-如何在拖动项目时创建拖动UI(指示项目要放置的位置)?

C# UWP:-如何在拖动项目时创建拖动UI(指示项目要放置的位置)?,c#,xaml,uwp,C#,Xaml,Uwp,我正在尝试创建一个类似于下面截图的拖动UI。如果我将listview中的AllowDrop设置为“true”,它会自动打开空间,为拖放的项目留出空间。但是,我更热衷于提供一个指示“drop here”而不是空格的UI 当我移动到拖动的项目上时,如何创建类似下面的内容,并带有占位符指示 有什么想法吗 当我移动到拖动的项目上时,如何创建类似下面的内容,并带有占位符指示 根据需要,您可以使用ListViewFooter来实现此功能,并在DragOver和Drop事件处理程序中处理FooterCo

我正在尝试创建一个类似于下面截图的拖动UI。如果我将listview中的AllowDrop设置为“true”,它会自动打开空间,为拖放的项目留出空间。但是,我更热衷于提供一个指示“drop here”而不是空格的UI

当我移动到拖动的项目上时,如何创建类似下面的内容,并带有占位符指示

有什么想法吗

当我移动到拖动的项目上时,如何创建类似下面的内容,并带有占位符指示

根据需要,您可以使用
ListView
Footer来实现此功能,并在
DragOver
Drop
事件处理程序中处理Footer
Collapsed
属性。请参考以下代码

private  void TargetListView_DragOver(object sender, DragEventArgs e)
{
    // Our list only accepts text
    e.AcceptedOperation = (e.DataView.Contains(StandardDataFormats.Text)) ? DataPackageOperation.Copy : DataPackageOperation.None;
    VisualStateManager.GoToState(this, "Inside", true);
}


private async void TargetListView_Drop(object sender, DragEventArgs e)
{

    if (e.DataView.Contains(StandardDataFormats.Text))
    {

        var def = e.GetDeferral();
        var s = await e.DataView.GetTextAsync();
        var items = s.Split('\n');
        foreach (var item in items)
        {
            _selection.Add(item);
        }
        e.AcceptedOperation = DataPackageOperation.Copy;
        VisualStateManager.GoToState(this, "Outside", true);
        def.Complete();
    }
}
Xaml

<ListView
    x:Name="TargetListView"
    Grid.Row="2"
    Grid.Column="1"
    Margin="8,4"
    AllowDrop="True"
    CanDragItems="True"
    CanReorderItems="True"
    DragItemsCompleted="TargetListView_DragItemsCompleted"
    DragItemsStarting="TargetListView_DragItemsStarting"
    DragOver="TargetListView_DragOver"
    Drop="TargetListView_Drop"
    >
    <ListView.Footer>
        <Border Background="DarkGray" Opacity="0.8">
            <TextBlock
                x:Name="Footer"
                Height="44"
                Margin="0,0,0,0"
                HorizontalAlignment="Center"
                VerticalAlignment="Bottom"
                FontSize="25"
                Text="Please Place your item"
                TextAlignment="Center"
                Visibility="Collapsed"
                />
        </Border>
    </ListView.Footer>
</ListView>


<VisualStateManager.VisualStateGroups>
    <VisualStateGroup x:Name="DragDropGroup">
        <VisualState x:Name="Outside" />
        <VisualState x:Name="Inside">
            <VisualState.Setters>
                <Setter Target="Footer.Visibility" Value="Visible" />
            </VisualState.Setters>
        </VisualState>
    </VisualStateGroup>
</VisualStateManager.VisualStateGroups>

Op在下面发布了uservoice,如果有人认为这有帮助,请投赞成票


谢谢@Nico。。。但这只适用于放置点位于页脚的情况。。。是否有一种方法可以跨项目模板复制相同的行为。。。在上面的屏幕截图中,这很难设计,但你可以使用mvvm绑定在dragover时插入临时项(“占位符文本”),在dragover时删除它。Ohh okay@Nico..谢谢。。。我尝试插入临时项目,但外观和感觉不好。。。当项目在listview中垂直拖动时,占位符不会立即反映YYEP,我认为这是一个很好的功能请求,允许用户自定义drop air样式,请随时在UserVoice.Sure上发布。我将提出一个要求。。谢谢你@Nico