2019-9-2-win10-uwp-获得焦点改变
title | author | date | CreateTime | categories |
---|---|---|---|---|
win10 uwp 获得焦点改变
|
lindexi
|
2019-09-02 12:57:38 +0800
|
2018-2-13 17:23:3 +0800
|
Win10 UWP
|
本文讲的是当我们应用失去焦点时,我们获得事件,当我们应用获得焦点,同样获得事件。同时,在应用不可以见时,我们也可以获得。
上面一张图,开始是应用启动,获得焦点,应用显示。然后我们打开另一个应用,切换,这时我们应用没有焦点。
然后我们用鼠标点击应用,我们应用获得焦点,这时显示鼠标点击获得焦点。
我们使用Alt+tab,切换出去别的软件,然后使用Alt+tab切换回,可以看到获得焦点。
然后点击任务栏,把应用最小化,这时我们的应用不显示,因为点开他就显示,我就使用字符串+
这样我们的应用就可以获得失去焦点和从哪获得焦点、应用不显示。
我们应用有两个事件,一个是Window.Current.Activated
一个Window.Current.VisibilityChanged
,我们可以通过Window.Current.Activated
来知道,我们的应用得到焦点。
UWP应用获得焦点可以使用Window.Current.Activated
,事件参数有几个,WindowActivatedEventArgs e
,CoreWindowActivationState
有
CodeActivated
从操作系统拿到焦点,这个就是我们使用Alt+tab,不是鼠标点击的获得焦点。我们这里,用鼠标点击任务栏打开应用,是操作系统给应用焦点。PointerActivated
鼠标点击获得焦点,用鼠标点击应用。Deactivated
没有焦点。
我用简单的字符串绑定到View,我们可以看到,我们应用失去焦点和获得焦点。
private void Current_Activated(object sender, WindowActivatedEventArgs e)
{
if (e.WindowActivationState == CoreWindowActivationState.CodeActivated)
{
ActivateReminder = "获得焦点\r\n";
}
else if (e.WindowActivationState == CoreWindowActivationState.PointerActivated)
{
ActivateReminder = "鼠标点获得\r\n";
}
else if (e.WindowActivationState == CoreWindowActivationState.Deactivated)
{
ActivateReminder = "没焦点\r\n";
}
}
我们可以用Window.Current.VisibilityChanged
获得我们应用显示,参数VisibilityChangedEventArgs e
如果e.Visible==true
就是显示。
我们把应用最小化,应用就会不显示。
参见:http://grogansoft.com/blog/?p=1269
如何判断应用是否获得焦点
有时候需要判断应用是否获得焦点,我的图床软件判断当前应用有焦点就自动复制。
但是不可以通过 Window.Current.CoreWindow.Visible
判断窗口是否获得焦点,这个值判断是窗口是否最小或,在手机可以使用这个,但是在pc不可以,因为可能我是打开其他的软件。
为了在UWP 判断窗口是否获得焦点,简单的方法是使用上面的代码在失去焦点获得,从而设置一个本地值,让他知道是否获得焦点。
private void Current_Activated(object sender, WindowActivatedEventArgs e)
{
_visibility = e.WindowActivationState != CoreWindowActivationState.Deactivated;
} private bool _visibility = true;
但是还需要加上 当窗口的可见变化时的
Window.Current.VisibilityChanged += Current_VisibilityChanged;
private void Current_VisibilityChanged(object sender, VisibilityChangedEventArgs e)
{
_visibility = e.Visible;
}
如果是在一个页面或一个控件使用上面的代码,注意,因为函数被加到一个静态的值,所以这个控件或page不会被释放,因为一直有引用。
如果经常进行导航,而且都是新建页面,那么会创建很多页面。
这些页面不会释放,于是内存占用越来越大,所以需要进行释放,方法是在视觉树取消时,从静态值删除函数。
private void Unloaded(object sender, RoutedEventArgs e)
{
Window.Current.VisibilityChanged -= Current_VisibilityChanged;
Window.Current.Activated -= Current_Activated;
}
最新文章
- Jmeter学习笔记TWO
- .NET LINQ 串联运算
- jquery筛选器
- Winform 委托窗体传值
- POJ 3281 Dining
- FileUpload无法赋值解决方案
- BZOJ 1014: [JSOI2008]火星人prefix Splay+二分
- RT-Thread学习笔记(1)
- C++ 继承的访问权限
- BZOJ_1778_[Usaco2010_Hol]_Dotp_驱逐猪猡_(期望动态规划+高斯消元+矩阵)
- GNU Make----Core Automatic Variables
- iOS横竖屏
- Windows Phone 8.1 多媒体(1):相片
- 浅学vue
- 前端自动化构建工具--Gulp&;&;Webpack
- MySQL函数转储存(当前月数据同步)
- 新知食APP架构分析--北京识物科技有限公司旗下产品
- python使用pyqt写带界面工具
- 38. CentOS-6.3安装配置Tomcat-7
- 配置Ceph集群为OpenStack后端存储
热门文章
- Leetcode824.Goat Latin山羊拉丁文
- css 的float和inline-block区别
- Otracle数据库定时任务--dbms_job
- Kubernetes1.3新特性:rktnetes
- 在 Linux Mint 19 上安装 zsh 和设置小键盘一步到位
- 2013年山东省第四届ACM大学生程序设计竞赛E题:Alice and Bob
- 【NS2】NS2中802.11代码深入理解—packet传输的流程(转载)
- LeetCode115 Distinct Subsequences
- android去掉layout顶部的阴影(状态栏下边的阴影)
- iOS 设计 用户为王 - 关于征询授权、注册及加载等待的体验优化