本章讲述:Activated获得焦点事件 和 Deactivated失去焦点的事件
Deactivated (public event EventHandler Deactivated;)
命名空间:System.Windows
在应用程序停止作为前台应用程序时发生。
Activated: 获得焦点 (首次打开软件时;由别的软件切换回当前软件时;点击当前软件在任务栏的按钮时)
Deactivated:失去焦点,与Activated正好相反,(Deactivated = de + activated)
下面的示例演示如何检测独立应用程序何时停用和激活。
<Application
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="SDKSample.App"
StartupUri="MainWindow.xaml"
Activated="App_Activated"
Deactivated="App_Deactivated" />
using System;
using System.Windows;
namespace SDKSample
public partial class App : Application
bool isApplicationActive;
void App_Activated(object sender, EventArgs e)
// Application activated
this.isApplicationActive = true;
void App_Deactivated(object sender, EventArgs e)
// Application deactivated
this.isApplicationActive = false;
在下列情况下,窗口将被停用(成为背景窗口):
用户切换到当前应用程序中的另一个窗口。
用户使用ALT+TAB或任务管理器切换到另一个应用程序中的窗口。
用户单击其他应用程序中窗口的任务栏按钮。
需要通过处理停用事件来检测何时停用的窗口。
在窗口第一次被停用后,它可能在其生命周期中多次被重新激活和停用。如果应用程序的行为或状态取决于其激活状态,它可以检查IsActive以确定它处于哪个激活状态。
也可以停用应用程序。
本章讲述:Activated获得焦点事件 和 Deactivated失去焦点的事件Deactivated (public event EventHandler Deactivated;)命名空间:System.Windows在应用程序停止作为前台应用程序时发生。Activated: 获得焦点 (首次打开软件时;由别的软件切换回当前软件时;点击当前软件在任务栏的按钮时)Deactiva...
应用程序窗口
WPF应用程序的重要两个类型是Application 和 Window,前者在一个应用程序中是全局唯一的,代表一个应用程序,它可以提供很多基础的应用程序的服务,应用程序也有生命周期。
应用程序的启动一般情况下是通过用户双击应用程序,由操作系统启动应用程序,当运行了Run函数之后,应用程序会触发一个Startup事件,它会一直监听鼠标,键盘或者手写笔的输入。应用程序有两种状态,一种是激活(Activated)状态,另一种是非激活(Deactiveated)状态。正常情况下,应用程序是通过用户关闭
假设单击按钮弹出指定窗体,这个按钮可以多次点击,但是弹窗只能有一个,需要每次单击事件中加入判断。
如果窗体存在则调用方法 form.Activate(); 激活,自动将其置于前面
如果form.Activate();无效,在前面加上form.Show();
form.Show();
form.Activate();
注意:激活的窗体必须可见才能产生效果
When a window is first opened, the Loaded and
ContentRendered events are raised only after the
Activated event is raised. With this in mind, a window can effectively be
如果在某个窗口的 Deactivated 事件里面,使用 Mouse.Capture 方法,让这个窗口重新捕获鼠标,那么将会让进程的所有窗口都失去鼠标交互,点击无效,只有在切换到其他进程的窗口之后,才能让窗口继续交互
实现这个坑的逻辑很简单,假定有两个窗口,分别是 MainWindow 和 Window1 两个窗口,在 Window1 的 Deactivated 事件里面,使用 Mouse.C...
Window 窗口获得焦点和失去焦点事件(窗口变为背景窗口、窗口切换等都引起窗口焦点失去)
Activated获得焦点事件 和 Deactivated失去焦点的事件:
Activated: 获得焦点 (首次打开软件时;由别的软件切换回当前软件时;点击当前软件在任务栏的按钮时)
Deactivated:失去焦点,与Activated正好相反,(Deactivated = de + activated)
使用方法有两种:
第一种是在XAML中声明,然后在后台书写执行代码:
```xml
<Window x:Class="TreeViewSample.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="TreeView Sample" Height="350" Width="250">
<TreeView ItemsSource="{Binding}">
<TreeView.Resources>
<HierarchicalDataTemplate DataType="{x:Type local:Node}" ItemsSource="{Binding Children}">
<TextBlock Text="{Binding Name}"/>
</HierarchicalDataTemplate>
</TreeView.Resources>
</TreeView>
</Grid>
</Window>
其中,Node 是一个自定义的类,用于表示树节点:
```csharp
public class Node
public string Name { get; set; }
public List<Node> Children { get; set; }
在代码中,可以通过设置 TreeView 的 ItemsSource 属性为一个 Node 对象的集合来展示树形结构:
```csharp
public partial class MainWindow : Window
public MainWindow()
InitializeComponent();
var nodes = new List<Node>
new Node { Name = "Node 1", Children = new List<Node> { new Node { Name = "Node 1.1" }, new Node { Name = "Node 1.2" } } },
new Node { Name = "Node 2", Children = new List<Node> { new Node { Name = "Node 2.1" }, new Node { Name = "Node 2.2" } } },
new Node { Name = "Node 3" }
DataContext = nodes;
这样就可以展示一个简单的树形结构了。