事件触发器(按钮)打开同一窗口的多个实例

本文关键字:窗口 实例 触发器 按钮 事件 | 更新日期: 2023-09-27 18:16:03

在我的WPF应用程序中,我有一个主窗口(Branch.xaml),它有一个按钮,将打开另一个窗口(Location.xaml)。一旦此位置窗口打开,当用户再次单击同一按钮时,如何防止此位置窗口的另一个实例打开?

或者当用户再次点击按钮时,我如何重新聚焦同一个打开的窗口?

按钮单击代码是在xaml中双击按钮时自动生成的代码。

在"Branch.xaml.cs"文件中,按钮点击的代码如下:

private void rbtn_Location_Click(object sender, RoutedEventArgs e) 
{ 
    Location location = new Location(); 
    location.Show(); 
} 

Location是一个自定义类,它打开一个带有3个列表框的窗口

谢谢,任何帮助都是感激的。我在c# 4.0上使用WPF应用程序&Visual Studio 2010.

事件触发器(按钮)打开同一窗口的多个实例

您可以在主窗口中创建一个字段,该字段保存对位置窗口的引用(如果有的话),在按钮单击处理程序中检查字段是否为空,如果是创建一个新窗口并将其存储在字段中,如果不是在字段中的窗口上调用Activate。您还必须订阅位置窗口的Closed事件,以便在位置窗口消失时再次清除引用。

编辑:具体示例:

private LocationWindow locationWindow;
private void Button1_Click(object sender, RoutedEventArgs e)
{
    if (locationWindow == null)
    {
        locationWindow = new LocationWindow();
        locationWindow.Closed += (s, _) => locationWindow = null;
        locationWindow.Show();
    }
    else
    {
        locationWindow.Activate();
    }
}

Application.Current。Windows集合保存当前AppDomain的所有Windows的引用。你可以在这个集合中检查你的窗口,如果它找到你的窗口,然后调用Activate for那个窗口,否则创建新的窗口。这会让你开始-

private void rbtn_Location_Click(object sender, RoutedEventArgs e) 
{ 
    Window window = Application.Current.Windows.OfType<Window>().Where(win => win.Name == "LocationWindow").FirstOrDefault();
    if(window == null)
    {
       Location location = new Location(); 
       location.Show(); 
    }
    else
    {
       window.Activate();  
    }
} 

确保您提供您的窗口x:Name作为LocationWindow使其工作

<Window x:Name="LocationWindow">
</Window>

还包括名称空间System.Linq后面的代码