/// <summary> /// Window をアクティブにします。 /// Activatable = false あるいは Visible = false の Window はアクティブにできません。 /// </summary> /// <param name="window">アクティブにする Window。</param> internal void ActivateWindow(Window window) { if (window == null) throw new ArgumentNullException("window"); EnsureWindow(window); // アクティブにできない Window は無視します。 if (!window.Activatable || !window.Visible) return; // 既にアクティブな場合には処理を終えます。 if (window.Active) return; // アクティブな Window を非アクティブ化します。 var activeWindow = GetActiveWindow(); if (activeWindow != null) activeWindow.Active = false; // 通常 Window ならば最前面へ移動させます。 if (!(window is Desktop)) { Windows.Remove(window); Windows.Add(window); } window.Active = true; // 論理フォーカスにフォーカスを設定します。 Screen.FocusedControl = window.FocusScope.FocusedControl; }
/// <summary> /// 指定の Window を表示します。 /// </summary> /// <param name="window">表示する Window。</param> internal void ShowWindow(Window window) { root.ShowWindow(window); }
/// <summary> /// 指定の Window を非表示にします。 /// </summary> /// <param name="window">非表示にする Window。</param> internal void HideWindow(Window window) { root.HideWindow(window); }
/// <summary> /// 指定の Window を閉じます。 /// </summary> /// <remarks> /// Desktop を指定した場合には例外が発生します (Desktop を閉じることはできません)。 /// </remarks> /// <param name="window">閉じる Window。</param> internal void CloseWindow(Window window) { root.CloseWindow(window); }
/// <summary> /// Window をアクティブ化します。 /// Window の Visible プロパティが true に設定されます。 /// </summary> /// <param name="window">アクティブ化する Window。</param> internal void ActivateWindow(Window window) { root.ActivateWindow(window); }
/// <summary> /// 指定の Window が追加済みではない場合に例外を発生させます。 /// </summary> /// <param name="window">Window。</param> void EnsureWindow(Window window) { if (Desktop != window && !Windows.Contains(window)) throw new InvalidOperationException( "The specified window could not be found in this screen."); }
/// <summary> /// 指定の Window を表示します。 /// </summary> /// <param name="window">表示する Window。</param> internal void ShowWindow(Window window) { if (window == null) throw new ArgumentNullException("window"); // 未登録ならば追加します。 if (!(window is Desktop) && !Windows.Contains(window)) Windows.Add(window); window.Visible = true; // アクティブにします。 if (window.Activatable) ActivateWindow(window); }
/// <summary> /// 指定の Window を非表示にします。 /// </summary> /// <param name="window">非表示にする Window。</param> internal void HideWindow(Window window) { if (window == null) throw new ArgumentNullException("window"); EnsureWindow(window); window.Visible = false; // 最前面の Window をアクティブ化します。 ActivateTopMostWindow(); }
/// <summary> /// 指定の Window を閉じます。 /// </summary> /// <remarks> /// Desktop を指定した場合には例外が発生します (Desktop を閉じることはできません)。 /// </remarks> /// <param name="window">閉じる Window。</param> internal void CloseWindow(Window window) { if (window == null) throw new ArgumentNullException("window"); EnsureWindow(window); if (window is Desktop) throw new InvalidOperationException("Desktop can never be closed."); // 非表示にしてから削除します。 HideWindow(window); Windows.Remove(window); }