C# WPF应用程序中的弹出窗口
我有一个C#WPF应用程序,它在xaml(p屏幕)中使用网格控件。对于网格中的每一行,我都有一个名为“详细信息”的列。单击此列中的项将显示一个弹出窗口,该窗口在xaml(C屏幕)中也有一个网格。 P的viewmodel中的“我的项目单击”事件具有以下代码:C# WPF应用程序中的弹出窗口,c#,wpf,C#,Wpf,我有一个C#WPF应用程序,它在xaml(p屏幕)中使用网格控件。对于网格中的每一行,我都有一个名为“详细信息”的列。单击此列中的项将显示一个弹出窗口,该窗口在xaml(C屏幕)中也有一个网格。 P的viewmodel中的“我的项目单击”事件具有以下代码: var myChildWindow = new MyGridView(); myChildWindow.Show(); 如果用户多次单击该项目,我只想突出显示现有的C弹出窗口。如果没有打开的现有窗口,那么我只想打开一个新窗口 我曾为Winf
var myChildWindow = new MyGridView();
myChildWindow.Show();
如果用户多次单击该项目,我只想突出显示现有的C弹出窗口。如果没有打开的现有窗口,那么我只想打开一个新窗口
我曾为Winforms应用程序处理过类似的需求。对于WPF应用程序,我该如何处理
谢谢。首先,您需要在click事件之外声明
myChildWindow
,以便可以从多个事件访问它。所以
MyGridView myChildWindow;
在click事件之外,可能作为私有变量
然后,在单击事件中查看它是否为空,如果为空,则创建它
if (myChildWindow == null)
{
myChildWindow = new MyGridView();
myChildWindow.Show();
}
您可以保留对窗口的引用,并在窗口关闭时删除该引用:
MyGridView myChildWindow;
private void Button_Click(object sender, RoutedEventArgs e)
{
if (myChildWindow == null)
{
myChildWindow = new MyGridView();
myChildWindow.Closed += MyChildWindow_Closed;
myChildWindow.Show();
}
else
{
myChildWindow.Activate();
}
}
private void MyChildWindow_Closed(object sender, EventArgs e)
{
myChildWindow.Closed -= MyChildWindow_Closed;
myChildWindow = null;
}
这是一个没有代码隐藏的项目吗?谢谢Sach的回复。但使用这种方法,例如,如果第3行的弹出窗口已处于活动状态,并且如果我单击第5行弹出窗口,则不会打开新窗口,而是会高亮显示/激活现有窗口本身。在我的应用程序中,每一行都会向弹出窗口传递一些数据…因此每一行的弹出窗口都不同;有一个单独的窗口代表每一行。但我觉得你的设计有一个更大的问题。弹出窗口或任何形式/窗口都是显示信息的设备。因此,为每一行提供不同的窗口实例是相当大的冗余。你可能想重新考虑你的方法;有一个窗口,根据用户单击的行,向其显示适当的数据。