事件触发器(按钮)打开同一窗口的多个实例
本文关键字:窗口 实例 触发器 按钮 事件 | 更新日期: 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
后面的代码