簡體   English   中英

ListView ManipulationCompleted事件在手機上不起作用

[英]ListView ManipulationCompleted event doesn't work on phone

我在Windows 10 UWP應用程序中有此代碼:

MyListView.ManipulationMode = ManipulationModes.TranslateX;
MyListView.ManipulationStarted += (s, e) => x1 = (int)e.Position.X;
MyListView.ManipulationCompleted += (s, e) =>
{
    x2 = (int)e.Position.X;
    if (x1 > x2)
    {
        DataController.PaneOpen(false);
    };
    if (x1 < x2)
    {
        DataController.PaneOpen(true);
    };
};

ManipulationCompleted事件在ListView中無法在手機上運行。 處理程序內的代碼永遠不會被調用。 它在PC上工作正常,但在手機上不起作用。 我不明白為什么。

ListView在PC上運行時,我們可以通過滾動鼠標滾輪來滾動它,但是當它在手機上工作時,沒有鼠標設備連接到手機,我們實際上通過滑動滾動ListView

ListView控件包含一個ScrollViewer如下所示: 在此輸入圖像描述

我認為問題在於這個ScrollViewer ,當它在PC上時,它分別處理滾動和操縱事件,但是當它在手機上時,它無法區分滾動和操縱事件。

在我看來,這個操縱事件可以響應鼠標設備,但不能單手觸摸。 如果我們在移動模擬器和模擬器上測試ListView ,當您使用手機模擬器的Single Point Mouse Input或模擬器的Mouse Mode時,操作事件可以正常工作,但是當您使用移動模擬器的Single Point Touch InputBasic Touch Mode時更清楚模擬器的Basic Touch Mode ,它不起作用。 有趣的是, 當我們使用Multi-Touch Input操作事件在移動模擬器上實際上仍能正常工作 更有趣的是, 使用操縱事件的官方文檔說:

如果您沒有觸摸屏顯示器,則可以使用鼠標和鼠標滾輪界面在模擬器中測試操作事件代碼。

所以,它應該適用於真正的手機。 由於我現在沒有任何設備,我不知道它是否在真正的手機上工作正常,我會在設備上測試后更新我的答案。

但是 ,我們仍然可以通過處理Pointer的事件來操縱手機上的ListView ,如下所示:

<ListView x:Name="MyListView" PointerCanceled="PointerExisted" PointerEntered="PointerEntered" PointerMoved="PointerMoved" PointerExited="PointerExisted">

測試它,它在PC和手機上都可以正常工作。

更新:

剛剛在X1 Carbon,Lumia950上測試過,我發現Manipulation事件將用兩根手指觸發,結果與移動仿真器上的結果相同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM