有几种方法可以实现您想要做的事情:
1) 等待Application
上的Activated
事件,然后检查Application.MainWindow
当您收到第一个“Activated
”事件时,您可以检查/使用Application.MainWindow
属性.....如果再次发生Activated
,则是因为您的窗口被取消激活,然后重新激活....因此,根据您正在进行的操作,决定仅在第一次激活或每次激活时执行您的代码。
<Application x:Class="WpfApplication7.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
StartupUri="MainWindow.xaml">
<Application.Resources>
</Application.Resources>
</Application>
public partial class App : Application
{
protected override void OnActivated(EventArgs e)
{
WireUp(MainWindow as MainWindow);
}
public void WireUp(MainWindow mainwindow)
{
mainwindow.GotFocus += new RoutedEventHandler(mainwindow_GotFocus);
mainwindow.LostFocus += new RoutedEventHandler(mainwindow_LostFocus);
}
void mainwindow_GotFocus(object sender, RoutedEventArgs e)
{
}
void mainwindow_LostFocus(object sender, RoutedEventArgs e)
{
}
}
2) 不要在App.xaml中使用StartupUri
, 自己创建MainWindow
<Application x:Class="WpfApplication7.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Application.Resources>
</Application.Resources>
</Application>
public partial class App : Application
{
protected override void OnStartup(StartupEventArgs e)
{
MainWindow mainwindow = new MainWindow();
mainwindow.Show();
WireUp(mainwindow);
}
public void WireUp(MainWindow mainwindow)
{
mainwindow.GotFocus += new RoutedEventHandler(mainwindow_GotFocus);
mainwindow.LostFocus += new RoutedEventHandler(mainwindow_LostFocus);
}
void mainwindow_GotFocus(object sender, RoutedEventArgs e)
{
}
void mainwindow_LostFocus(object sender, RoutedEventArgs e)
{
}
}
3) 在您的MainWindow
的Loaded
事件中,通过Application.Current
单例找到您的App
在处理MainWindow
的"Loaded"事件时,访问您在App
类中提供的“某些内容”,以连接您感兴趣的事件。缺点是它使您的窗口与App
类紧密耦合。
public partial class App : Application
{
public void WireUp(MainWindow mainwindow)
{
mainwindow.GotFocus += new RoutedEventHandler(mainwindow_GotFocus);
mainwindow.LostFocus += new RoutedEventHandler(mainwindow_LostFocus);
}
void mainwindow_GotFocus(object sender, RoutedEventArgs e)
{
}
void mainwindow_LostFocus(object sender, RoutedEventArgs e)
{
}
}
public MainWindow()
{
this.Loaded += MainWindow_Loaded;
}
private void MainWindow_Loaded(object sender, RoutedEventArgs e)
{
App app = Application.Current as App;
app.WireUp(this);
}