Monitorwechsel oder DPI-Wechsel erkennen

  • WPF
  • .NET (FX) 4.5–4.8

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von eichseinet.

    Monitorwechsel oder DPI-Wechsel erkennen

    Hallo Leute!

    Mein Programm soll ein Image in einem Canvas anzeigen. Mein PC nutzt aber die Scalierung in den Anzeigeeinstellungen auf 150% für den Hauptmonitor und 125% für den 2. Monitor.
    Mit folgendem Code lässt sich die Scalierung auslesen:

    VB.NET-Quellcode

    1. Dim wndMain As Window = Application.Current.MainWindow
    2. Dim srcDevice As PresentationSource = PresentationSource.FromVisual(wndMain)
    3. Dim m As Matrix = srcDevice.CompositionTarget.TransformToDevice
    4. Dim factor_dpi_Height As Double = m.M11


    Multipliziert man jetzt die Pixelhöhe des Bildes mit dem Faktor, dann erhält man die richtige Angabe der "Height" für das "Image" im XAML.
    Das funktioniert alles schon. Schiebt man aber das Programm auf den 2. Monitor, dann passt es natürlich nicht mehr. Man könnte das lösen, indem man bei jedem neuen Bild wieder den Faktor einliest und einfach einmal Bild vor / zurück springt. Is aber nicht so schön. :)
    Die schöne Lösung wäre es den Wechsel des Monitors bzw. der DPI-Einstellung zu erkennen und dann den neuen Faktor zu lesen und die Bildhöhe neu vorzugeben.

    Hat jemand Vorschläge wie (ob) das funktioniert?

    Gruß

    eddi
    Du könntest dir eventuell etwas mit dem Window.LocationChanged-Event bauen.
    Ich wäre aber vorsichtig, wenn du bei jedem Event etwas neues Berechnest, könnte das ziemlich "laggy" werden.

    Edit: Hab gerade auf die schnelle das hier gefunden, könnte eventuell besser funktionieren.