我有一个ListView
,其ItemTemplate
有一个SwipeControl
和一个ContextFlyout
。
但是,当我长按(我不只是用鼠标指着鼠标)PlaylistControlItem
时,会显示LeftItems
的{{1}}而不是SwipeControl
。 / p>
我应该如何显示ContextFlyout
?
下面是我的ContextFlyout
:
ListView
更多源代码here
为不同的操作模式提供优化是一个好主意,但还需要遵循一些设计原则。
但是应该注意,ContextFlyout
和SwipeControl
都有自己的内部操作逻辑,例如SwipeControl
是手指轻扫,ContextFlyout
是右键单击或长按。您不能修改它。
您可以尝试将ContextFlyout
绑定到更高级别,这可能会有所帮助。像这样:
<DataTemplate>
<UserControl>
<UserControl.ContextFlyout>
<MenuFlyout Opening="OpenMusicMenuFlyout" />
</UserControl.ContextFlyout>
<SwipeControl>
<SwipeControl.LeftItems>
<SwipeItems Mode="Reveal">
<SwipeItem Text="Favorite">
</SwipeItem>
</SwipeItems>
</SwipeControl.LeftItems>
<SwipeControl.RightItems>
<SwipeItems Mode="Execute">
<SwipeItem Text="Remove">
</SwipeItem>
</SwipeItems>
</SwipeControl.RightItems>
<local:PlaylistControlItem DataContext="{x:Bind}" ShowAlbumText="{Binding ElementName=PlaylistController,Path=ShowAlbumText}">
</local:PlaylistControlItem>
</SwipeControl>
</UserControl>
</DataTemplate>
但是从用户体验的角度来看,我不建议混用ContextFlyout
和SwipeControl
。它们都是隐式操作,这意味着UI上没有明显的提示可告诉用户这样做。
您正在做的是一个播放列表。我的建议是在MoreButton
的末尾添加一个PlaylistControlItem
。这是一个明显的提示。单击后,您可以显示Flyout
并使用它代替隐式的ContextFlyout
。
如果您仍然打算长按来呼叫ContextFlyout
,请考虑在用户界面上明确提示用户“可以这样做”。
此外,某些相同的程序处理逻辑可用于优化不同设备的体验。 UWP具有专门为此目的而设计的设计模式。您可以参考Commanding in Universal Windows Platform (UWP) apps using StandardUICommand,XamlUICommand,and ICommand来优化代码并在各种设备上建立出色的体验
更新
我测试了您的代码并检查了问题原因。设置ListView.CanDragItems
属性时,您会忽略AllowReorder
属性。
尝试一下:
public bool AllowReorder
{
get => SongsListView.CanReorderItems;
set
{
SongsListView.CanReorderItems = SongsListView.AllowDrop = SongsListView.CanDragItems = SongsListView.CanDrag = value;
}
}
最诚挚的问候。