2017-03-05 9 views
1

Avalondockで浮動ツールを復元する際に問題が発生しています。 アプリ開発では、いくつかのツールでドキュメント管理にavalondockを使用しています。 私は通常、第2モニタのツールを使用します。WPF C#複数のモニタ125%での位置スケーリングの復元

私は、125%のスケーリングと100%のスケーリングで、複数のモニタを使用しています。メインモニターは4kモニター、もう1台は2kモニターです。

1台のモニター(3440x1440)でリモートPCを操作してアプリを実行すると、2台目のモニターのツールが表示されず、メイン画面に戻す方法がないことに気付きました。

AvalondockのフローティングLayoutAnchorablesは、別々のビューとして扱われません。 LayoutAnchorableを別のウィンドウビューとして作成する方法を知っている人がいれば、それが最適な解決策です。しかし、私はそれを行う方法を見つけることができませんでした。私は、次の

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ダブル args.Model.FloatingTop 909.6ダブル

WorkingArea {X = 0、Y = 0の幅= 4300の高さ= 1750} System.Drawing.Rectangleを試し 問題は、作業領域が125%でスケーリングされていることです。 これは、args.Modelをメインウィンドウの範囲内にします。

私はSystem.Windows.Forms.Screen情報を使用することはできません。ユーザーが使用するスケーリングがわからないためです。

複数のモニタと位置とスケーリングの実際の解像度はどうやって取得できますか?

答えて

0

私は自分自身で答えを見つけました。

浮動ウィンドウの所有者をnullにすることができました。 明らかに、ドックの浮動ウィンドウはSystem.Windows.Windowから継承します これは最初から私が望んでいたものです。

private void DockManager_LayoutUpdated(object sender, EventArgs e) 
{ 
    foreach (var floatingWindow in dockManager.FloatingWindows) 
    { 
     if (floatingWindow.Owner != null) 
     { 
      floatingWindow.Owner = null; 
     } 
     floatingWindow.ShowInTaskbar = true; 
    } 
} 
関連する問題