2017-09-29 6 views
0

Description du problèmeWPF Barre d'outils de débordement Touchinteraction cesse App répondre à l'entrée

Lorsque vous utilisez Touch (écran) entrée pour faire fonctionner un bouton à l'intérieur du trop-plein d'une barre d'outils WPF l'application cesse de répondre aux souris et entrées tactiles. La saisie au clavier ou l'exécution de code (même dans UI Thread) ne semble pas affectée. Déplacer la souris en dehors de la zone de contenu Windows libère le gel et l'application peut être réutilisée (jusqu'à ce que le débordement soit à nouveau utilisé).

Il arrive parfois que cela arrive directement avec la première interaction, souvent vous pouvez utiliser le bouton plusieurs fois avant que le "gel" se produise.

Le "gel" ne se produit pas lorsque vous utilisez la souris pour accéder au bouton dans le débordement.

environnement de test

J'ai fait un petit projet de test pour vérifier qu'il est pas quelque chose dans mon application et j'ai pu vérifier le problème pour .NET 4.5.2, 4.6.1 et 4.7.

Il a été testé sur deux PC Windows 7 différents avec différents écrans tactiles. Les deux avec le même résultat.

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> 

pensées supplémentaires

Pour moi, il ressemble à la barre d'outils ou OverflowToggleButton capture le dispositif de la souris dès que le panneau de trop-plein se ferme. Tenir le débordement panneau ouvert n'empêche le gel (testé dans mon grand App)

Répondre

0

Je crossposted la question sur MSDN: https://social.msdn.microsoft.com/Forums/de-DE/c4e6061d-ecc1-4c7e-afe9-2587cfd2734d/fenster-bekommt-keine-maus-und-touchevents-mehr-nach-touch-interaktion-mit-toolbar-overflow?forum=wpfde

Le deuxième lien de la réponse marquée au-dessus de cette discussion m'a aidé: https://social.msdn.microsoft.com/Forums/de-DE/d964afd2-67d4-4dfb-b118-695ab07ef6c1/wpf-popups-and-touch-input-can-cause-ui-to-become-unresponsive?forum=wpf

en gros, dans l'événement Click du bouton à l'intérieur du débordement je force le MouseCapture au bouton et le relâcher à nouveau:

code derrière (pas emty plus)

private void Button_Click(object sender, RoutedEventArgs e) 
    { 
     CaptureMouse(); 
     ReleaseMouseCapture(); 
    }