本章讲述: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; 这样就可以展示一个简单的树形结构了。