【问题标题】:WPF - Focus second window by clicking a buttonWPF - 通过单击按钮聚焦第二个窗口
【发布时间】:2017-05-04 06:49:02
【问题描述】:

我正在创建一个 WPF 应用程序,并且我有 3 个 Windows(MainWindowWindow2Window3)。当我启动项目时,Window2 在我的MainWindow 加载后立即加载。当我点击Button 时,Window3 会打开

Window3 w3 = new Window3(this, this.window2);
w3.ShowDialog();

但我无法在Window2 中执行操作(单击控件等),我知道ShowDialog() 方法正在禁用其他打开的 Windows,但有可能在 Window2 中使用这些控件进行访问。当Window3 打开时,我如何才能访问Window2 的功能? PS.(很抱歉问了一个愚蠢的问题,但我是 WPF 的初学者)!

【问题讨论】:

  • 分享代码。
  • 哪部分代码足够分享?因为我有很多东西……
  • 你是怎么打开窗户的?
  • 我只想通过单击 Window3 中的按钮返回 Window2
  • 那么你可以这样做:yourWindowName.Focus();或者在Window2中找到你想要聚焦的控件并调用它的Focus()方法。

标签: wpf window focus


【解决方案1】:

您可以访问System.Windows.Application 静态类的Windows 集合以获取所有当前打开的窗口的列表。然后,您可以迭代集合并按类型或其他条件查找您的窗口。一种方法是:

var window3 = Application.Current.Windows.OfType<Window3>().FirstOrDefault();

编辑:

在问题的 cmets 中,您说您正在使用 w3.Show() 方法打开窗口。以非模态方式打开窗口。在编辑问题后 w3.ShowDialog() 以 modal 方式打开窗口。 你可以在MSDN了解更多关于模态窗口的信息

当函数需要用户提供额外数据才能继续时,函数会显示模式对话框。因为该功能依赖于模式对话框来收集数据,所以模式对话框还可以防止用户在应用程序中保持打开状态时激活其他窗口。

因此,为了能够在窗口之间切换焦点,它们应该是非模态并使用Show 方法而不是ShowDialog 打开。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-05
    • 2016-11-19
    • 2014-04-19
    • 1970-01-01
    • 1970-01-01
    • 2020-06-09
    相关资源
    最近更新 更多