dotnet / wpf

WPF is a .NET Core UI framework for building Windows desktop applications.
MIT License
6.82k stars 1.13k forks source link

Strange Behavior in Touch Application using WPF #9019

Open Joebu opened 2 weeks ago

Joebu commented 2 weeks ago

Description

In my touch application developed with WPF, I've encountered a perplexing behavior when interacting with buttons within an ItemsControl. Occasionally, when touching down on one button, the click action seems to be executed on a different button within the ItemsControl.

This issue occurs sporadically and is challenging to consistently reproduce. The buttons within the ItemsControl are utilizing a custom template. I've observed this behavior across multiple touch devices, indicating that it's not specific to a particular hardware configuration.

It's worth noting that this issue seems to be isolated to touch interactions, as it doesn't manifest with mouse input. To aid in diagnosing the problem, I plan to attach a video demonstrating the behavior. In the video, I'll highlight where the touch occurs on the screen and indicate which button erroneously triggers the click event by changing its background color to blue.

https://github.com/dotnet/wpf/assets/12544824/87546f5a-5938-457f-940f-e4f5e4d16303

Reproduction Steps

since its random I just can't reproduce but here's my event handler (originally I used command binding but I thought that it might be a bubbling issue )

 private void Button_Click(object sender, RoutedEventArgs e)
 {
     if (sender is Button button
          && e.OriginalSource is Button source
          && source == button &&
           button.DataContext is MenuDTO menu
          && this.DataContext is ViewModels.MenuSelectionViewModel vm)
          {
                 _ = ChangeColor(source);
                vm.MenuSelectedCommand.Execute(menu);
           }
   }

additionally I have set the Button Focusable=False

Expected behavior

the button that is touched should raise the event

Actual behavior

randomly a different button raises the event

Regression?

No response

Known Workarounds

No response

Impact

No response

Configuration

.net: net8.0-windows Windows 10 Enterprise 19045.4046 AMD Ryzen 9 5900X 12-Core Processor 3.70 GHz Issue occurs on different configurations as well

Other information

No response

lindexi commented 2 weeks ago

@Joebu Maybe the Manipulation eat your touch event. Reference https://github.com/dotnet/wpf/issues/8223#issuecomment-1916695624

Joebu commented 2 weeks ago

@lindexi What would be the remedy

lindexi commented 1 week ago

@Joebu Could you test disable the Manipulation ?

Joebu commented 1 week ago

@lindexi does it make sense that the following fixed the issue? AppContext.SetSwitch("Switch.System.Windows.Input.Stylus.EnablePointerSupport", true);

lindexi commented 1 week ago

@Joebu Sorry, I do not think so.

Joebu commented 1 week ago

But it did. I didn't mention that I am using an elo touch screen