如何解决WPF-避免重复代码,以防止通过一种方法两次打开同一窗口
我有OpenWindow(Window window)
要显示窗口
private void OpenWindow(Window window)
{
window.WindowStartupLocation = WindowStartupLocation.CenterScreen;
window.Icon = this.Icon;
window.Show();
}
并使用其他一些代码来防止两次进入同一窗口
private void addStore_Click(object sender,RoutedEventArgs e)
{
bool isWindowOpen = false;
foreach (Window w in Application.Current.Windows)
{
if (w is CompanyWindow)
{
isWindowOpen = true;
w.Activate();
}
}
if (!isWindowOpen)
{
OpenWindow(new StoresWindow());
}
}
private void SotreList_Click(object sender,RoutedEventArgs e)
{
bool isWindowOpen = false;
foreach (Window w in Application.Current.Windows)
{
if (w is CompanyWindow)
{
isWindowOpen = true;
w.Activate();
}
}
if (!isWindowOpen)
{
OpenWindow(new StoreListwindow());
}
}
我需要的是如何在OpenWindow()
中编写防止两次打开窗口代码?
解决方法
为避免重复,可以使用泛型
public void OpenWindow<T> () where T: Window,new() {
var active = Application.Current.Windows.OfType<Window>().SingleOrDefault(x = >x is T)
if (active == null) {
var window = new T();
window.WindowStartupLocation = WindowStartupLocation.CenterScreen;
window.Icon = this.Icon;
window.Show();
}
else {
active.Activate();
}
}
用法:
OpenWindow<StoreListWindow>();
,
尝试一下:
private void OpenWindow(Window window)
{
foreach (var w in Application.Current.Windows)
{
//If the Types of the Windows match,if (window.GetType() == w.GetType())
//Ends the Method
return;
}
window.WindowStartupLocation = WindowStartupLocation.CenterScreen;
window.Icon = this.Icon;
window.Show();
}
,
您可以有一个扩展方法,用于在标志打开时设置标志,以及一种用于检查IsOpen的方法。我的意思是Window上的扩展方法。
否则尝试在...上编写一些逻辑。Application.Current.Windows
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。