如果ListView不是"无"选择模式,则RightTapped不会在Metro ListViewItem上触发

Jan*_*man 3 c# xaml windows-8 windows-runtime winrt-xaml

该问题几乎与此处描述的相同:http://social.msdn.microsoft.com/Forums/en-US/winappswithcsharp/thread/542b827a-7c8e-4984-9158-9d8479b2d5b1但我对接受的答案不满意在那里,并觉得必须有一个更好的解决方案......

我试图在我的列表视图上实现一个'clasic'上下文菜单(不是通过AppBar,而是通过PopupMenu)并且工作正常,但是只有当我将列表视图设置为"无"SelectionMode时.

上面的链接正确地解释了如果ListView设置为"无"选择模式以外的ListViewItem'吞下'右侧轻敲事件.如何覆盖此行为,以便列表视图项被选中,列表视图仍然会触发我可以响应的RightTapped事件?

Jan*_*man 7

我相信我通过继承ListView和ListViewItem类来解决问题.

public class MyListView : ListView
{
    protected override DependencyObject GetContainerForItemOverride()
    {
        return new MyListViewItem();
    }
}

public class MyListViewItem : ListViewItem
{
    protected override void OnRightTapped(Windows.UI.Xaml.Input.RightTappedRoutedEventArgs e)
    {
        base.OnRightTapped(e);
        e.Handled = false; // Stop 'swallowing' the event
    }
}

<CustomControls:MyListView
    x:Name="MyListView"
    ...
    SelectionMode="Single"
    RightTapped="MyListView_RightTapped">
</CustomControls:MyListView>
Run Code Online (Sandbox Code Playgroud)

通过这种简单的方法,即使将SelectionMode设置为"Single","Multiple"或"Extended",也会调用MyListView_RightTapped处理程序.然而,接下来的问题是这个小小的胜利是否会导致应用程序UI的良好设计.我不会试图在这里回答这个问题......