首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

WPF 模態視窗隱藏後重新顯示變非模態的解決方案

     編輯:關於.NET

現象

以 ShowDialog() 顯示的模態視窗,若設 Visibility = Hidden 隱藏,再設 Visibility = Visible 顯示,視窗將失去模態特性(主視窗恢復可互動)。

原因

WPF 內部以 Visibility 控制模態狀態,隱藏會破壞模態循環。

替代方案:移出螢幕而非隱藏

保留視窗實例與模態狀態,將視窗座標移至螢幕外(如 -100000, -100000),並關閉工作列圖示;還原時恢復座標、狀態與工作列顯示。

附加行為實作

public static class WindowVisibilityHelper
{
    public static readonly DependencyProperty IsVisibleProperty =
        DependencyProperty.RegisterAttached("IsVisible", typeof(bool), typeof(WindowVisibilityHelper),
            new PropertyMetadata(true, OnIsVisibleChanged));

    private static void OnIsVisibleChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
        var win = (Window)d;
        bool visible = (bool)e.NewValue;

        if (!visible)
        {
            SaveWindowState(win);
            win.WindowState = WindowState.Normal;
            win.Left = -100000;
            win.Top = -100000;
            win.ShowInTaskbar = false;
        }
        else
        {
            RestoreWindowState(win);
            win.Activate();
            win.BringIntoView();
        }
    }

    // 儲存/還原 Left、Top、WindowState、ShowInTaskbar 至附加屬性...
}

使用方式

<Window local:WindowVisibilityHelper.IsVisible="{Binding IsWindowVisible}" />

綁定 ViewModel 布林屬性即可安全切換「可見/不可見」且保持模態行為,適合螢幕鎖定、閒置隱藏等場景。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved