2010-06-30 2 views
3

J'écris une application graphique pour fonctionner sur un appareil à écran tactile utilisant VB.NET et WPF - elle doit être en plein écran en tout temps, comme une application de kiosque; la fenêtre ne doit pas pouvoir se redimensionner ou se déplacer de quelque façon que ce soit. La fenêtre contient un ListBox que les utilisateurs peuvent actuellement faire défiler en faisant glisser dans la liste. Le problème que je vois est que lorsque l'utilisateur fait défiler la liste, toute la fenêtre se déplace un peu, exposant le bureau en dessous, puis se remet en place une fois que l'utilisateur arrête de glisser. Je n'ai pas été capable de comprendre comment garder la fenêtre immobile tout en permettant aux utilisateurs de faire glisser à travers le ListBox pour voir tous les éléments de la liste. Voici une version quelque peu simplifiée de mon code:La fenêtre censée être en plein écran dans l'application tactile WPF se déplace lorsque la liste intérieure est défilée

<Window 
    x:Class="MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="MainWindow" 
    WindowStyle="None" 
    WindowState="Maximized" 
    WindowStartupLocation="CenterScreen" 
    KeyboardNavigation.TabNavigation="None" 
    Topmost="True" 
    Focusable="False" 
    ResizeMode="NoResize" 
    ShowInTaskbar="False" 
    MaxHeight="1080px" 
    MaxWidth="1920px"> 
    <Grid> 
    <ListBox 
     x:Name="docList" 
     ScrollViewer.HorizontalScrollBarVisibility="Hidden" 
     ScrollViewer.VerticalScrollBarVisibility="Hidden" 
     BorderThickness="0"> 
     <TextBlock Text="Item1" /> 
     <TextBlock Text="Item2" /> 
     <TextBlock Text="Item3" /> 
     <TextBlock Text="Item4" /> 
     <TextBlock Text="Item5" /> 
     <TextBlock Text="Item6" /> 
    </ListBox> 
    </Grid> 
</Window> 
+0

Windows le fait avec les événements de défilement tactile. Il simule le glisser sur quelque chose qui a déjà défilé tout au long de la fenêtre. Cela peut parfois prêter à confusion (j'ai vu un programme où une zone de texte était une fenêtre et la zone de texte pouvait être légèrement extraite de la fenêtre "parent" de cette façon). Cependant, je ne connais pas de moyen de l'éteindre. – Joey

+0

J'ai compté sur le système pour fournir la fonctionnalité tactile par défaut. Dois-je capturer tous les événements tactiles et les gérer moi-même? –

Répondre

4

Je crois que si vous gérez l'événement OnManipulationBoundaryFeedback(object sender, TouchEventArgs e) sur la zone de liste, et définissez la e.Handled propriété true, qui devrait empêcher le « rebond » de la fenêtre d'application.

Il peut aussi être possible (je n'y avais pas pensé jusqu'à maintenant) de gérer l'événement au niveau de la fenêtre, puisqu'il s'agit d'un événement bouillonnant, pour atténuer le risque que d'autres contrôles provoquent le même comportement.

Questions connexes