2017-03-05 7 views
1

Ich habe Probleme beim Wiederherstellen von schwebenden Werkzeugen in Avalondock. Die App Im Entwicklung verwendet AvalonDock für Dokumentenmanagement mit ein paar Tools. Normalerweise verwende ich die Tools auf dem 2. Monitor.WPF C# mehrere Monitore, die die Positionsskalierung auf 125% zurücksetzen

Ich benutze mehrere Monitore bei der Arbeit mit 125% Skalierung auf einem und 100% Skalierung auf der anderen Seite. Der Hauptmonitor ist 4k Monitor, der andere ist 2k Monitor.

Wenn ich den Desktop-PC mit einem einzigen Monitor (3440x1440) entfernte und die App lief, bemerkte ich, dass die Tools in den zweiten Monitoren nicht sichtbar sind und ich keine Möglichkeit habe, sie zum Hauptbildschirm zurückzubringen.

Avalondocks schwebende LayoutAnchorboards werden nicht als separate Ansichten behandelt. Wenn jemand weiß, wie man LayoutAnchorable als separate Windows-Ansicht macht, wäre das die beste Lösung. Aber ich konnte nicht finden, wie es geht. Ich versuchte, das folgende

if (args.Model.IsFloating) 
{ 
    var left = (int)args.Model.FloatingLeft; 
    var top = (int)args.Model.FloatingTop; 
    var width = (int)args.Model.FloatingWidth; 
    var height = (int)args.Model.FloatingHeight; 
    var rect = new System.Drawing.Rectangle(left, top, width, height); 
    var intersected = Screen.AllScreens.Any(p => p.WorkingArea.IntersectsWith(rect)); 
    if (!intersected) 
    {        
     //need to reposition 
     args.Model.FloatingLeft = 0; 
     args.Model.FloatingTop = 0; 
    } 
    //args.Model.FloatingTop; 
} 

System.Windows.SystemParameters.PrimaryScreenHeight 1440 double 
System.Windows.SystemParameters.PrimaryScreenWidth 3440 double 
System.Windows.SystemParameters.VirtualScreenHeight 1440 double 
System.Windows.SystemParameters.VirtualScreenWidth 3440 double 

args.Model.FloatingLeft 4133,6 Doppel args.Model.FloatingTop 909,6 Doppel

working {X = 0 Y = 0 Width = 4300 Height = 1750} System.Drawing.Rectangle Das Problem ist, dass der Arbeitsbereich auf 125% skaliert ist. Dies macht args.Model innerhalb der Grenzen der Hauptfenster.

Also ich denke, ich System.Windows.Forms.Screen Informationen nicht verwenden kann, weil ich weiß nicht, was die Anwenderskalierung verwenden werden.

Wie bekomme ich die tatsächlichen Auflösungen der mehreren Monitore und Positionen und Skalierung?

Antwort

0

Ich fand die Antwort selbst.

Ich konnte den Floating-Windows-Besitzer auf null setzen. Anscheinend das Floatingwindow des Docks erben von System.Windows.Window Das ist, was ich von Anfang an wollte.

private void DockManager_LayoutUpdated(object sender, EventArgs e) 
{ 
    foreach (var floatingWindow in dockManager.FloatingWindows) 
    { 
     if (floatingWindow.Owner != null) 
     { 
      floatingWindow.Owner = null; 
     } 
     floatingWindow.ShowInTaskbar = true; 
    } 
} 
Verwandte Themen