WPF窗口关闭时未设置为null

巴布

我正在开发一个MainWindow从应用程序中打开的插件我正在使用C#和WPF。

public class StartRIR : IExternalCommand
{
    private static MainWindow mainwindow;

    public Result Execute(
        ExternalCommandData commandData,
        ref string message,
        ElementSet elements)
    {
        if (mainwindow != null)
        {
            mainwindow.Focus();
            return Result.Succeeded;
        }
        else
        {
            mainwindow = new MainWindow(commandData);
            mainwindow.Show();
            return Result.Succeeded;
        }
    }
}

当我调用外部应用程序时,将执行此代码,目的是避免MainWindow同时打开多个代码

但是,如果我关闭窗口,我将无法再打开它。这是否意味着关闭窗口不会将其设置为null?我是否必须重写Closing事件,还是有其他方法?

曼弗雷德·拉德维默

我在这种情况下使用经理类。它跟踪所有已注册的窗口类型并订阅该Closed事件。

public class SingleWindowTypeHelper
{
    public SingleWindowTypeHelper()
    {
        _windows = new List<Window>();
    }

    private readonly List<Window> _windows;

    public T GetExistingWindow<T>()
    {
        return _windows.OfType<T>().FirstOrDefault();
    }

    public bool ShowExistingWindow<T>() where T : Window
    {
        T window = GetExistingWindow<T>();
        if (window == null) return false;

        if (window.WindowState == WindowState.Minimized)
            window.WindowState = WindowState.Normal;

        window.Activate();
        return true;
    }

    public void AddNewWindow(Window window)
    {
        _windows.Add(window);
        window.Closed += WindowOnClosed;

        window.Show();
        window.Activate();
    }

    private void WindowOnClosed(object sender, EventArgs eventArgs)
    {
        Window window = sender as Window;
        if (window == null) return;

        window.Closed -= WindowOnClosed;
        _windows.Remove(window);
    }
}

要使用它,您只需要在代码中的某个位置创建一个实例

private readonly SingleWindowTypeHelper _windowHelper = new SingleWindowTypeHelper();

并检查现有的窗口,如下所示:

if (_windowHelper.ShowExistingWindow<YourWindowType>()) return;

YourWindowType dialog = new YourWindowType();
// do some additional initialization here
_windowHelper.AddNewWindow(dialog);

或您的情况:

public class StartRIR : IExternalCommand
{
    private static readonly SingleWindowTypeHelper _windowHelper = 
        new SingleWindowTypeHelper();

    public Result Execute(
        ExternalCommandData commandData,
        ref string message,
        ElementSet elements)
    {
        if (_windowHelper.ShowExistingWindow<MainWindow>()) 
            return Result.Succeeded;

        MainWindow dialog = new MainWindow(commandData)();
        _windowHelper.AddNewWindow(dialog);
        return Result.Succeeded;
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

WPF页面内容未设置为窗口的大小

来自分类Dev

对象未设置为null

来自分类Dev

关闭窗口时WPF内存泄漏

来自分类Dev

对象引用未设置为实例WPF设计器

来自分类Dev

WPF 错误对象引用未设置为对象的实例

来自分类Dev

C#Internet Explorer控件,将样式设置为无,就像wpf窗口样式设置为null,并允许透明

来自分类Dev

筛选dataGridView时“对象引用未设置为对象的实例”

来自分类Dev

使用委托时“对象引用未设置为实例”

来自分类Dev

过滤dataGridView时,“对象引用未设置为对象的实例”

来自分类Dev

关闭WPF窗口

来自分类Dev

关闭wifi时,GDCWebserver serverURL为null

来自分类Dev

关闭wifi时,GDCWebserver serverURL为null

来自分类Dev

在wpf中关闭窗口时是否必须取消订阅事件?

来自分类Dev

失去焦点时如何关闭WPF弹出窗口

来自分类Dev

如何在 WPF XAML 中将 ContentPresenter 默认内容设置为未设置

来自分类Dev

如何在关闭窗口时设置断点或防止关闭“开发人员工具”窗口?

来自分类Dev

用户清除WPF中的文本字段时,文本框未将值设置为null

来自分类Dev

关系未设置为空

来自分类Dev

对象未设置为参考

来自分类Dev

关闭工作簿时出现“对象变量或未设置块变量”

来自分类Dev

android SetSwapInterval()时间间隔:1未设置-尝试打开新窗口时

来自分类Dev

@foreach模型为null:System.NullReferenceException:对象引用未设置为对象的实例

来自分类Dev

最上面的WPF窗口设置为true问题

来自分类Dev

将WPF窗口DataContext设置为RelativeSource Self

来自分类Dev

即使将调度程序优先级设置为后台,也无法在返回所有UI线程之前关闭新的WPF窗口

来自分类Dev

在显示我的C#窗口表单时关闭“拖动时显示窗口内容”设置

来自分类Dev

WPF设计器绑定与转换器抛出对象引用未设置为对象的实例

来自分类Dev

在WPF设计器中,对象引用未设置为对象的实例,位于x:Reference

来自分类Dev

WPF设计器绑定与转换器抛出对象引用未设置为对象的实例

Related 相关文章

  1. 1

    WPF页面内容未设置为窗口的大小

  2. 2

    对象未设置为null

  3. 3

    关闭窗口时WPF内存泄漏

  4. 4

    对象引用未设置为实例WPF设计器

  5. 5

    WPF 错误对象引用未设置为对象的实例

  6. 6

    C#Internet Explorer控件,将样式设置为无,就像wpf窗口样式设置为null,并允许透明

  7. 7

    筛选dataGridView时“对象引用未设置为对象的实例”

  8. 8

    使用委托时“对象引用未设置为实例”

  9. 9

    过滤dataGridView时,“对象引用未设置为对象的实例”

  10. 10

    关闭WPF窗口

  11. 11

    关闭wifi时,GDCWebserver serverURL为null

  12. 12

    关闭wifi时,GDCWebserver serverURL为null

  13. 13

    在wpf中关闭窗口时是否必须取消订阅事件?

  14. 14

    失去焦点时如何关闭WPF弹出窗口

  15. 15

    如何在 WPF XAML 中将 ContentPresenter 默认内容设置为未设置

  16. 16

    如何在关闭窗口时设置断点或防止关闭“开发人员工具”窗口?

  17. 17

    用户清除WPF中的文本字段时,文本框未将值设置为null

  18. 18

    关系未设置为空

  19. 19

    对象未设置为参考

  20. 20

    关闭工作簿时出现“对象变量或未设置块变量”

  21. 21

    android SetSwapInterval()时间间隔:1未设置-尝试打开新窗口时

  22. 22

    @foreach模型为null:System.NullReferenceException:对象引用未设置为对象的实例

  23. 23

    最上面的WPF窗口设置为true问题

  24. 24

    将WPF窗口DataContext设置为RelativeSource Self

  25. 25

    即使将调度程序优先级设置为后台,也无法在返回所有UI线程之前关闭新的WPF窗口

  26. 26

    在显示我的C#窗口表单时关闭“拖动时显示窗口内容”设置

  27. 27

    WPF设计器绑定与转换器抛出对象引用未设置为对象的实例

  28. 28

    在WPF设计器中,对象引用未设置为对象的实例,位于x:Reference

  29. 29

    WPF设计器绑定与转换器抛出对象引用未设置为对象的实例

热门标签

归档