dotnet / runtime

.NET is a cross-platform runtime for cloud, mobile, desktop, and IoT apps.
https://docs.microsoft.com/dotnet/core/
MIT License
14.56k stars 4.54k forks source link

[WPF] System.Management 8.0.0 - Scrolling using stylus does not work anymore when using ManagementClass.GetInstances() #103640

Open Stormrice opened 2 weeks ago

Stormrice commented 2 weeks ago

Description

Hi!

We have a problem when using the System.Management nuget package in a WPF project.

When calling ManagementClass.GetInstances(), the touchscreen scrolling (using stylus or finger) does not work anymore in the application.

Reproduction Steps

MainWindow.xaml

<Window
    x:Class="Toto.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"
    Title="MainWindow"
    Width="800"
    Height="800"
    mc:Ignorable="d">
    <Grid>
        <Border
            Width="400"
            Height="600"
            Background="White"
            CornerRadius="6">
            <Border.Effect>
                <DropShadowEffect
                    BlurRadius="15"
                    Direction="-90"
                    RenderingBias="Quality"
                    ShadowDepth="2"
                    Color="Gray" />
            </Border.Effect>

            <Grid Margin="20">
                <Grid.RowDefinitions>
                    <RowDefinition Height="50" />
                    <RowDefinition Height="50" />
                    <RowDefinition Height="*" />
                </Grid.RowDefinitions>

                <TextBlock
                    Grid.Row="0"
                    Padding="10"
                    HorizontalAlignment="Center"
                    VerticalAlignment="Top"
                    FontSize="30"
                    FontWeight="Bold"
                    Text="License Status" />

                <TextBlock
                    x:Name="Status"
                    Grid.Row="1"
                    Padding="10"
                    HorizontalAlignment="Center"
                    VerticalAlignment="Top"
                    FontSize="20"
                    TextAlignment="Center"
                    TextWrapping="Wrap" />

                <ScrollViewer
                    Grid.Row="2"
                    PanningMode="Both"
                    VerticalScrollBarVisibility="Visible">
                    <TextBlock
                        Margin="10"
                        Text="  Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean placerat mi eget sapien tempor, quis ullamcorper mi rutrum. Aenean aliquet vehicula porta. Vestibulum ante nisl, lacinia at molestie a, congue at sapien. Praesent sit amet ipsum eleifend, sodales nisi gravida, hendrerit libero. Morbi pretium feugiat vehicula. Donec eleifend sollicitudin leo, et tempus felis facilisis id. Praesent elementum, ligula id congue ultrices, ex lacus rhoncus dui, eu fringilla sapien urna sit amet risus. Ut a ligula eget erat dictum varius sit amet non velit. Sed interdum accumsan tellus, eget sollicitudin lorem eleifend non. Donec porttitor quis sapien et sollicitudin. Nullam iaculis efficitur purus, id faucibus urna mollis at. Nam lobortis a arcu nec semper.  Nam feugiat faucibus neque, quis placerat nunc aliquam non. Fusce fermentum sem a consectetur faucibus. Nam a purus dictum, varius libero eu, rhoncus metus. Maecenas iaculis, metus nec imperdiet aliquet, orci ipsum accumsan arcu, non ultrices magna nibh ac quam. Aenean volutpat, justo et commodo malesuada, arcu diam iaculis nulla, vitae auctor felis turpis blandit metus. Suspendisse potenti. Maecenas eget lectus diam. Nullam pulvinar, risus in aliquet commodo, nisi enim finibus leo, vitae hendrerit ligula diam eget odio. Cras urna massa, commodo vel urna nec, maximus sollicitudin orci. In hac habitasse platea dictumst. Quisque vulputate sapien eget urna feugiat malesuada. Morbi fringilla ut risus sit amet luctus. Donec hendrerit id erat tincidunt molestie. Cras venenatis urna erat, vitae vestibulum metus volutpat sit amet. Morbi congue odio eu rhoncus bibendum.  Integer at tortor ex. Duis eleifend volutpat enim eu tincidunt. In ut nibh eget quam viverra finibus. Suspendisse bibendum vehicula massa at semper. Integer vitae pellentesque enim. Maecenas posuere quis magna sit amet cursus. Aenean ullamcorper neque ac dui egestas, a tempor neque porttitor. Donec eu nunc cursus, ullamcorper justo vitae, tempor justo. Nullam placerat dignissim viverra. Donec sem quam, scelerisque a porta id, efficitur eu massa. Ut eu rhoncus ipsum. Donec sed lectus nec magna iaculis laoreet tristique ornare ante.  Cras a leo condimentum, tristique enim congue, condimentum nunc. Pellentesque congue ligula nec tortor facilisis luctus. Nunc nec nunc urna. Duis nulla risus, molestie in scelerisque at, cursus id erat. Curabitur eget augue nec velit mollis rutrum. Sed rutrum nibh a rhoncus vulputate. Quisque in dapibus mi. Proin ornare turpis nisl, vel vestibulum urna vulputate quis. Donec accumsan, velit condimentum suscipit pretium, velit metus porttitor enim, at aliquet mi dolor ut erat.  Duis lacinia turpis sagittis massa sodales facilisis. Nulla feugiat facilisis augue, eget fermentum nisl mollis ac. In eget rhoncus augue. Curabitur volutpat iaculis porttitor. Nullam sit amet augue ac risus dignissim mollis vitae sit amet libero. In congue rhoncus nulla, at vehicula nisi porta vitae. Etiam posuere malesuada malesuada. Maecenas libero odio, mollis ut venenatis at, hendrerit at erat. "
                        TextWrapping="Wrap" />
                </ScrollViewer>
            </Grid>
        </Border>
    </Grid>
</Window>

MainWindow.xaml.cs

using System.Management;
using System.Windows;
using System.Windows.Media;

namespace Toto
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

            ManagementClass mc = new("Win32_BaseBoard");
            ManagementObject mo = mc.GetInstances().OfType<ManagementObject>().First();
        }
    }
}

Expected behavior

Scrolling using the touchscreen should work.

Actual behavior

The scrolling using the touchscreen does not work.

Regression?

No response

Known Workarounds

_ = Tablet.TabletDevices;

Source: https://github.com/dotnet/runtime/issues/522

Configuration

.NET: SDK 8.0.300 OS: Windows 10 Pro 22H2 (19045.4529) Arch: x64

Other information

No response

dotnet-policy-service[bot] commented 2 weeks ago

Tagging subscribers to this area: @dotnet/area-system-management See info in area-owners.md if you want to be subscribed.

ViktorHofer commented 2 weeks ago

When calling ManagementClass.GetInstances(), the touchscreen scrolling (using stylus or finger) does not work anymore in the application.

What was the last version that worked? I'm trying to narrow down the diff. Especially as this could also be wpf related.

Stormrice commented 2 weeks ago

I am sorry I do not know, it is the first time we use this Nuget package.

Stormrice commented 2 weeks ago

Apparently, there is a workaround:

_ = Tablet.TabletDevices;

Source: https://github.com/dotnet/runtime/issues/522

Stormrice commented 2 weeks ago

I am adding some information.

I have tested all available versions of System.Management (starting from 8.0.0 to 4.5.0).

Here are my results:

Next I will try on a Windows 11 system.

Stormrice commented 2 weeks ago

not_working.webm working.webm

I am adding two screen recordings.

From what I observe, it seems the problem is System.Management somehow disabling the Windows tablet mode, as I can see the cursor pointer is not the same.

Stormrice commented 2 weeks ago

Same results with Windows 11.

Stormrice commented 3 days ago

@ViktorHofer Are you able to reproduce my issue? Thanks