【发布时间】:2021-05-12 09:21:55
【问题描述】:
我有一个带有上下文菜单的 ListView,可以重新排序。 我希望它的行为非常类似于 power-point 演示文稿(以及许多其他应用程序)中的缩略图:
- 如果您在尚未选择的页面上单击鼠标右键,则在弹出上下文菜单之前它成为已选择的页面
- 如果您开始拖动尚未选中的页面,则该页面在拖动前成为选中页面。
Xaml:
<Page
x:Class="TestApp.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:TestApp"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<Page.Resources>
<MenuFlyout x:Key="EditFlyout">
<MenuFlyoutItem Text="Copy" Icon="Copy"/>
<MenuFlyoutItem Text="Paste" Icon="Paste"/>
</MenuFlyout>
</Page.Resources>
<Grid>
<ListView
ItemsSource="{x:Bind Pages, Mode=OneWay}"
SelectionMode="Extended"
CanReorderItems="True" AllowDrop="True"
ContextFlyout="{StaticResource EditFlyout}">
<ListView.ItemTemplate>
<DataTemplate x:DataType="local:DocPage">
<TextBlock Text="{x:Bind Name, Mode=OneWay}"/>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</Grid>
</Page>
代码:
namespace TestApp
{
public class DocPage
{
public string Name;
// Edit: actual class is more complex and includes rendered bitmap thumbnail etc...
}
public sealed partial class MainPage : Windows.UI.Xaml.Controls.Page
{
public ObservableCollection<DocPage> Pages = new ObservableCollection<DocPage>();
public MainPage()
{
this.InitializeComponent();
DocPage PageA = new DocPage() { Name = "PageA" };
DocPage PageB = new DocPage() { Name = "PageB" };
Pages.Add(PageA);
Pages.Add(PageB); // duplicates are intended, we cannot differentiale a selection by "item"
Pages.Add(PageB);
Pages.Add(PageA);
Pages.Add(PageB);
Pages.Add(PageB);
}
}
}
我怎样才能做到这一点?
编辑:满足预期行为的一种方法是在按下项目而不是释放项目时触发选择/多选(使用 ctrl / shift)的 ListView 逻辑。显然在 WPF 上,选择逻辑在按下项目时发生,但在 UWP 中,当项目被释放时发生,不知道为什么(link)
【问题讨论】:
标签: uwp