【问题标题】:Excel file getting freeze when i open any WPF window by click on Ribbon当我通过单击功能区打开任何 WPF 窗口时 Excel 文件冻结
【发布时间】:2015-06-17 05:59:00
【问题描述】:

我有一个用 VSTO 制作的 C# EXCEL 应用程序。我在功能区中有几个按钮,它们将打开相应的 WPF(xaml) 窗口。

我的问题是,当我单击任何功能区按钮时,将打开相应的 WPF 页面,然后在打开 WPF 窗口之前我无法访问该 excel 文件。关闭该 WPF 窗口后,我就可以再次访问 excel,因此即使打开了任何 wpf 窗口,我也想访问 excel 文件,以便我可以同时使用功能区的其他功能。

我该怎么做?

【问题讨论】:

    标签: c# asp.net wpf xaml vsto


    【解决方案1】:

    使用Show() 而不是ShowDialog()

    【讨论】:

    • 但是现在由于 show() 而我遇到了另一个问题。例如,假设我的 excel 应用程序已打开,因此当我加载我的解决方案时,该 excel 文件的第一个单元格将获得焦点,现在当我单击功能区上的按钮时,它将使用 SHOW() 方法打开一个新窗口,所以问题是新创建的窗口没有获得焦点,即使我将单击该窗口上的文本框并尝试编写一些内容,它将返回到运行 excel 文件的焦点单元格。
    • 如果单元格处于编辑模式 - 您无法访问其他表单/任务窗格。这是一个已知问题。它甚至发生在 excel 的内置功能中。如果您打开 excel,您可以观看它,转到“审阅”选项卡,然后按“研究”按钮,“研究”任务窗格将打开。现在开始编辑一个单元格并尝试专注于任务窗格 - 你会发现这是不可能的
    • 那么有什么办法可以解决这个问题吗?因为在我的应用程序中,使用 SHOW() 方法打开的窗口必须获得焦点,以便用户可以在该窗口内使用控件。
    • 感谢您的帮助。它可以帮助我理解我的问题。
    【解决方案2】:
    var window = new MainWindow();
    
    // this will set focus back to excel after window closed.
    window.Closed+=(sender, e)=> System.Wndows.Threading.Dispatcher.ExitAllFrames();
    
    window.Show();
    System.Windows.Threading.Dispathcer.Run(); // push this to the queue so the textbox can be focused
    

    【讨论】:

    • 希望它能解决问题,但请添加对代码的解释,以便用户完全理解他/她真正想要的。
    猜你喜欢
    • 2019-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多