Window becomes inactive after DialogHost.Show()

未關閉
#3,497 12 則留言 0 個 reaction 已指派 1 人 在 GitHub 檢視

維護者通常 1 天內回覆

@MichelMichels 已經在處理了。

開始於 2024年3月31日。

評估

這個 Issue 還沒有評估資料。

描述

bug dialoghost
Bug explanation

I'm trying to make a preloader using DialogHost (I need to display a loading indicator and lock the application while the data is being loaded)

However, when I call DialogHost.Show(), the application window loses focus

5.0.1-ci571:

https://github.com/MaterialDesignInXAML/MaterialDesignInXamlToolkit/assets/12599641/870a9dc8-6a78-467a-923e-92513d43876c

if you click on a dialog, the window will become active again along with the dialog.
so they are not mutually exclusive

In my past project I used version 4.6.1 and the window did not lose focus when DialogHost was opened

I tried different versions in the current project:

  • 4.10.0-ci317 everything works perfectly
  • 5.0.0-ci321 this bug appears

4.10.0-ci317:

https://github.com/MaterialDesignInXAML/MaterialDesignInXamlToolkit/assets/12599641/47933a28-e0f8-4cf1-8cea-f3b8a798802f

How can this be fixed without downgrading to an older version?

My code:

PreloaderDialog

<UserControl x:Class="Client.View.Dialogs.PreloaderDialog"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
             mc:Ignorable="d">
    <ProgressBar Width="24"
                 Height="24"
                 Margin="16"
                 IsIndeterminate="True"
                 Style="{StaticResource MaterialDesignCircularProgressBar}"
                 Value="33" />
</UserControl>

MainWindow

<Window x:Class="Client.View.Windows.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
        xmlns:controls="clr-namespace:Client.View.Controls"
        mc:Ignorable="d"
        Title="FriendSync"
        Height="500" Width="540"
        WindowStartupLocation="CenterScreen">
    <materialDesign:DialogHost
        Identifier="RootDialog"
        DialogTheme="Inherit"
        Loaded="DialogHost_OnInitialized">
        ...
    </materialDesign:DialogHost>
</Window>

Method to show preloader

public static async Task DoWithPreloader(Action action, string host = DIALOG_ROOT) {
  var dialog = new PreloaderDialog();

  if (DialogHost.IsDialogOpen(host)) {
    try {
      DialogHost.Close(host);
    } catch (Exception) {
      // ignored
    }
  }

  await DialogHost.Show(dialog, host, new DialogOpenedEventHandler((_, args) => {
    action();
    try {
      if (!args.Session.IsEnded) {
        args.Session.Close(false);
      }
    } catch (Exception) {
      // ignored
    }
  }));
}

Calling code

DialogUtils.DoWithPreloader(() => {
  // some time-consuming code
});
Version

5.0.1-ci571

主要語言
C#
星號
16.3k
分支
3.5k
平均合併
4 小時 25 分鐘
30 天內合併 PR
4

環境準備

  • 沒有 Dockerfile 或 Docker Compose 檔案
  • 沒有 Pull Request 範本
  • 閱讀貢獻指南

從這裡開始

  1. 先讀完整個 Issue,再讀專案的貢獻指南。
  2. 在 Issue 下留言說明你要接手 —— 這能避免兩個人做同樣的事。
  3. Fork 儲存庫,在一個分支上完成修改。
  4. 送出 Pull Request,並在描述裡引用這個 Issue 編號。

MaterialDesignInXAML/MaterialDesignInXamlToolkit 的其他 Issue

查看 MaterialDesignInXAML/MaterialDesignInXamlToolkit 的全部 Issue

相似的 Issue

更多 C# Issue

把新 issue 寄到你的電子郵件信箱

精選適合新手參與的 GitHub issue 摘要。