磁気配向を達成するためにWPFマルチウィンドウ機能ウエルト

オリジナル: 磁気アラインメントを達成するために、WPFマルチウィンドウ機能ウェルト

Iの序文

新学期選択科目の.NETソフトウェア開発以来、我々は、C#言語を使用するようになりました。私はノーリターン(霧)の上に置かれた.NET便利なC#の構文糖の様々なことを発見しました。JavaのC#の、書き込みコード演奏は実際には、どんなに包括的にかかわらず、JavaFXのか、WPFの定数は、ですが、ほとんどの使用を普及するためのJavaデスクトップアプリケーションで書かれていない、または腿、書き込みよりフィッティングWindowsはMicrosoftを開催しますシステムソフトウェアのバー。

テキスト

弁別

翻訳は辞書で、その後、他の人のオープンソースのノウハウドックがVSに似たウィンドウ内にドッキングされている読み「ドッキング」されるため、プロパティドックの効果のような名前の考えは、この効果で、Webブラウザのようなもののラベルです一種の「停止。」言い換えると、この記事の効果は、「秘密の店を。」を記述するために

原則

効果の原理は、本明細書に記載される各ウィンドウの縦横の境界の座標を持つレコードの集合体です。各ウィンドウは、次いで、(本明細書中で延伸ウエルトをサポートしていないだけでなく、わずかに変更変更されていることができる)、ドラッグされた境界位置が変更されると、ウィンドウの境界の変更は、所定の閾値よりも他のウィンドウとの座標を取ります(例えば、±5)内に、範囲内の結合位置にウィンドウの位置を調整することを余儀なくされます。

メソッドの紹介

以下は、ウィンドウオブジェクトへのウィンドウでパラメーターの位置を微調整する必要があることです

  • 更新(ウィンドウ)は、各ウィンドウを持って、タイムリーにデータを記録する方法を呼び出すとき-void
  • [削除](ウィンドウ)は、すべてのウィンドウが非表示になっているか閉じているために、タイムリーに消去データにメソッドを呼び出してください-voidとき
  • AUTODOCK(ウィンドウ)(変化のタイミングは、コードを変更する必要が微調整に)エッジでの通話に移動または必要とされているウィンドウに転記-void

欠点

この記事に付属のコードでは、ちょうど原則の非常にラフな実現です。

  • 単にコントロールデザイナ一般的な(霧)を配置する補助配向効果と同様に、距離アラインメント:副作用をもたらします
  • ウィンドウ操作と記事のコード・セットは、補助クラスエフェクトの位置の変更を完了です。換言すれば、この方法で変更されたデータので、イベント最終のプログラムフローロジック、ウィンドウの移動が完了した後、この方法のタイミングが起動されていることを確認するためにバインドされています。パフォーマンスを持参すると、自動的にウエルトを移動します以上です。実際、ソフトウェアは、通常、他の人のは、移動中にウエルト人です。他の移住に変更するための時間が必要です。
  • アルゴリズム:データモデルを選択し、この記事のアルゴリズムとコードは非常に才能されていません。私を許して

コード

    public class DockingManager {
        public static Dictionary<Window, double> LeftBorder {get;}
        public static Dictionary<Window, double> TopBorder {get;}
        public static Dictionary<Window, double> RightBorder {get;}
        public static Dictionary<Window, double> BottomBorder {get;}

        static DockingManager() {
            LeftBorder = new Dictionary<Window, double>();
            TopBorder = new Dictionary<Window, double>();
            RightBorder = new Dictionary<Window, double>();
            BottomBorder = new Dictionary<Window, double>();
        }

        public static void Update(Window w) {
            LeftBorder[w] = w.Left;
            TopBorder[w] = w.Top;
            RightBorder[w] = w.Left + w.Width;
            BottomBorder[w] = w.Top + w.Height;
        }

        public static void Delete(Window w) {
            LeftBorder.Remove(w);
            TopBorder.Remove(w);
            RightBorder.Remove(w);
            BottomBorder.Remove(w);
        }

        public static void AutoDock(Window w) {
            double t = w.Top, b = w.Top + w.Height, l = w.Left, r = w.Left + w.Width;
            var temp = HorizontalSet(w);
            foreach (var d in temp) {
                if (t >= d - 10 && t <= d + 10) {
                    w.Top = d;
                    break;
                }
                if (b >= d - 10 && b <= d + 10) {
                    w.Top = d - w.Height;
                    break;
                }
            }
            temp = VerticalSet(w);
            foreach (var d in temp) {
                if (l >= d - 10 && l <= d + 10) {
                    w.Left = d;
                    break;
                }
                if (r >= d - 10 && r <= d + 10) {
                    w.Left = d - w.Width;
                    break;
                }
            }
            Update(w);
        }

        private static HashSet<double> HorizontalSet(Window w) {
            HashSet<double> s = new HashSet<double>();
            foreach (var v in TopBorder.Keys) {
                if (v != w) {
                    s.Add(TopBorder[v]);
                }
            }
            foreach (var v in BottomBorder.Keys) {
                if (v != w) {
                    s.Add(BottomBorder[v]);
                }
            }
            return s;
        }

        private static HashSet<double> VerticalSet(Window w) {
            HashSet<double> s = new HashSet<double>();
            foreach (var v in LeftBorder.Keys) {
                if (v != w) {
                    s.Add(LeftBorder[v]);
                }
            }
            foreach (var v in RightBorder.Keys) {
                if (v != w) {
                    s.Add(RightBorder[v]);
                }
            }
            return s;
        }
    }
  
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84

おすすめ

転載: www.cnblogs.com/lonelyxmas/p/12208798.html