none
Fenster bekommt keine Maus- und Touchevents mehr nach Touch Interaktion mit Toolbar Overflow RRS feed

  • Frage

  • Problembeschreibung

    Wenn man den Overflow einer WPF Toolbar per Touch öffnet und darin einen Button per Touch betätigt kommt es spätestens nach ein paar solcher Interaktionen zum "einfrieren" des Fensters. Das Programm an sich funktioniert noch und Code wird weiterhin ausgeführt. Allerdings werden keine Events der Maus oder des Touchscreens mehr an die Controls weiter geleitet.

    Das Fenster lässt sich wieder beleben, indem man mit der Maus den Content-Bereich des Fensters verlässt.

    Der Fehler tritt nicht bei Bedienung mit der Maus auf.

    Testumgebung

    Ich konnte das Problem auf zwei unterschiedlichen Rechnern mit Windows 7 feststellen.

    Framework: 4.6.1 und 4.7

    App: Aufgefallen ist der Fehler in meinem Aktuellen Projekt. Da dies etwas größer ist und ich einen Fehler meinerseits ausschließen wollte habe ich ein neues Projekt erstellt und nur eine Toolbar darin platziert. Das Problem ließ sich sofort nachstellen.

    Code

    <Window x:Class="ToolBarTest.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:ToolBarTest"
        mc:Ignorable="d"
        Title="MainWindow"
        Height="350"
        Width="525">
    <DockPanel>
        <ToolBarTray DockPanel.Dock="Top">
        <ToolBar>
            <Button Content="New" />
            <Button Content="Open" />
            <Button Content="Save" />
        </ToolBar>
        <ToolBar>
            <Button Content="Cut" />
            <Button Content="Copy" />
            <Button Content="Paste" />
            <Button ToolBar.OverflowMode="Always">
                <Grid>
                    <TextBlock Text="Testbutton" />
                </Grid>
            </Button>
            </ToolBar>
        </ToolBarTray>
        <TextBox AcceptsReturn="True" />
    </DockPanel>

    Codebehind ist leer. (Bis auf den automatisch generierten Constructor)

    Anmerkungen

    Für mich sieht es so aus, als wenn beim schließen des OverflowPopup der Fokus zurück auf den OverflowToggleButton fällt und dieser dann auch gleich die Maus einfängt (capture). Hält man das OverflowPopup künstlich offen tritt der Fehler nicht auf.

    Fragen

    Handelt es sich hierbei evtl. um einen Bug im Framework? Oder stelle ich mich gerade nur blöd an? 

    Gibt es einen Workaround für das Problem?


    Mittwoch, 11. Oktober 2017 11:29

Antworten

  • Hallo Troubadix75,

    Ich bin auf einige Threads gestoßen, die ebenfalls über dieses Verhalten bei WPF-Projekten und Windows 7 mit Touchscreen berichten. Hast Du das Projekt unter Windows 8.1 oder Windows 10 getestet? Für weitere Informationen verweise ich Dich auf folgende Threads:
    Full screen touch application hangs when a user touches the lower edge
    WPF Popups and touch input can cause UI to become unresponsive

    Obwohl im ersten Thread dieses Verhalten als Bug in Windows 7 gedeutet wird, könnte es sein, dass die Problemumgehung, die der Thread-Ersteller im zweiten Thread veröffentlicht hat, auch in Deinem Fall Abhilfe schaffen wird. Er geht nämlich davon aus, dass das Popup die Mausaufzeichnung nicht freigibt und behilft sich mit der CaptureMouse-Methode.

    Gruß,
    Dimitar


    Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

    • Als Antwort markiert Troubadix75 Donnerstag, 12. Oktober 2017 15:10
    Donnerstag, 12. Oktober 2017 11:25
    Moderator

Alle Antworten

  • Hallo Troubadix75,

    Ich bin auf einige Threads gestoßen, die ebenfalls über dieses Verhalten bei WPF-Projekten und Windows 7 mit Touchscreen berichten. Hast Du das Projekt unter Windows 8.1 oder Windows 10 getestet? Für weitere Informationen verweise ich Dich auf folgende Threads:
    Full screen touch application hangs when a user touches the lower edge
    WPF Popups and touch input can cause UI to become unresponsive

    Obwohl im ersten Thread dieses Verhalten als Bug in Windows 7 gedeutet wird, könnte es sein, dass die Problemumgehung, die der Thread-Ersteller im zweiten Thread veröffentlicht hat, auch in Deinem Fall Abhilfe schaffen wird. Er geht nämlich davon aus, dass das Popup die Mausaufzeichnung nicht freigibt und behilft sich mit der CaptureMouse-Methode.

    Gruß,
    Dimitar


    Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

    • Als Antwort markiert Troubadix75 Donnerstag, 12. Oktober 2017 15:10
    Donnerstag, 12. Oktober 2017 11:25
    Moderator
  • Hallo Dimitar,

    vielen Dank für die Antwort.

    Leider stehen mir zum testen keine Windows8.1 oder Windows10 Rechner zur Verfügung. Zudem käme auch ein Update der Windows Version auf dem Zielrechner der Applikation nicht in Frage. Es handelt sich um Industrie-PCs auf denen eine Soft-PLC läuft die keine höheren Windows Versionen als Windows 7 unterstützt.

    Die zwei Threads hatte ich auf meiner Suche bisher noch nicht gefunden. Die Lösung aus dem zweiten Thread (CaptureMouse(); ReleaseMouseCapture();) habe ich jetzt mal so eingebaut. Es scheint zumindest zu wirken (auf meinem Entwicklungsrechner). 

    Ich werde das aber weiter beobachten müssen, da ja auch der OP des zweiten Threads am Ende noch schreibt, dass er weiterhin Probleme hat.

    Vielen Dank noch mal, Deine Antwort hat mich auf jeden Fall schon mal einen großen Schritt vorwärts gebracht.

    Gruß
    Thomas

    Donnerstag, 12. Oktober 2017 15:10