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 eCoreWindowActivationState

  • CodeActivated
    从操作系统拿到焦点,这个就是我们使用Alt+tab,不是鼠标点击的获得焦点。我们这里,用鼠标点击任务栏打开应用,是操作系统给应用焦点。

  • PointerActivated
    鼠标点击获得焦点,用鼠标点击应用。

  • Deactivated
    没有焦点。

我用简单的字符串绑定到View,我们可以看到,我们应用失去焦点和获得焦点。

  1. private void Current_Activated(object sender, WindowActivatedEventArgs e)
  2. {
  3. if (e.WindowActivationState == CoreWindowActivationState.CodeActivated)
  4. {
  5. ActivateReminder = "获得焦点\r\n";
  6. }
  7. else if (e.WindowActivationState == CoreWindowActivationState.PointerActivated)
  8. {
  9. ActivateReminder = "鼠标点获得\r\n";
  10. }
  11. else if (e.WindowActivationState == CoreWindowActivationState.Deactivated)
  12. {
  13. ActivateReminder = "没焦点\r\n";
  14. }
  15. }

我们可以用Window.Current.VisibilityChanged获得我们应用显示,参数VisibilityChangedEventArgs e如果e.Visible==true就是显示。

我们把应用最小化,应用就会不显示。

参见:http://grogansoft.com/blog/?p=1269

如何判断应用是否获得焦点

有时候需要判断应用是否获得焦点,我的图床软件判断当前应用有焦点就自动复制。

但是不可以通过 Window.Current.CoreWindow.Visible 判断窗口是否获得焦点,这个值判断是窗口是否最小或,在手机可以使用这个,但是在pc不可以,因为可能我是打开其他的软件。

为了在UWP 判断窗口是否获得焦点,简单的方法是使用上面的代码在失去焦点获得,从而设置一个本地值,让他知道是否获得焦点。

  1. private void Current_Activated(object sender, WindowActivatedEventArgs e)
  2. {
  3. _visibility = e.WindowActivationState != CoreWindowActivationState.Deactivated;
  4. }
  5.  
  6. private bool _visibility = true;

但是还需要加上 当窗口的可见变化时的

  1. Window.Current.VisibilityChanged += Current_VisibilityChanged;
  2. private void Current_VisibilityChanged(object sender, VisibilityChangedEventArgs e)
  3. {
  4. _visibility = e.Visible;
  5. }

如果是在一个页面或一个控件使用上面的代码,注意,因为函数被加到一个静态的值,所以这个控件或page不会被释放,因为一直有引用。
如果经常进行导航,而且都是新建页面,那么会创建很多页面。

这些页面不会释放,于是内存占用越来越大,所以需要进行释放,方法是在视觉树取消时,从静态值删除函数。

  1. private void Unloaded(object sender, RoutedEventArgs e)
  2. {
  3. Window.Current.VisibilityChanged -= Current_VisibilityChanged;
  4. Window.Current.Activated -= Current_Activated;
  5. }

2019-9-2-win10-uwp-获得焦点改变的更多相关文章

  1. win10 uwp 获得焦点改变

    本文讲的是当我们应用失去焦点时,我们获得事件,当我们应用获得焦点,同样获得事件.同时,在应用不可以见时,我们也可以获得. 上面一张图,开始是应用启动,获得焦点,应用显示.然后我们打开另一个应用,切换, ...

  2. win10 uwp 让焦点在点击在页面空白处时回到textbox中

    在网上 有一个大神问我这样的问题:在做UWP的项目,怎么能让焦点在点击在页面空白处时回到textbox中? 虽然我的小伙伴认为他这是一个 xy 问题,但是我还是回答他这个问题. 首先需要知道什么是空白 ...

  3. Win10 UWP应用发布流程

    简介 Win10 UWP应用作为和Win8.1 UAP应用不同的一种新应用形式,其上传至Windows应用商店的流程也有了一些改变. 这篇博文记录了我们发布一款Win10 UWP应用的基本流程,希望为 ...

  4. win10 uwp MVVM 轻量框架

    如果在开发过程,遇到多个页面之间,需要传输信息,那么可能遇到设计的问题.如果因为一个页面内包含多个子页面和多个子页面之间的通信问题找不到一个好的解决方法,那么请看本文.如果因为ViewModel代码越 ...

  5. win10 uwp 商业游戏

    本文告诉大家去做一个商业游戏,游戏很简单,几乎没有什么技术 游戏的开始,需要添加框架库,于是引用我自己写的库. 首先是创建一个启动页面,这个页面是显示启动的. 在显示启动的时候,是需要加载游戏需要使用 ...

  6. win10 uwp ApplicationView

    原文:win10 uwp ApplicationView 本文和大家介绍一个重要的类,他可以用来设置窗口,如设置启动大小,设置是否允许截图,是否进入全屏,所有和窗口有关的,都可以在他这里设置. 可以使 ...

  7. win10 uwp 如何使用DataTemplate

    这是数据模板,一般用在数组的绑定,显示数组中的元素. 假如我们有一个列表,列表里是书,包括书名.作者.还有出版,那么我们只有源信息,如何把它显示到我们的ListView,就需要DataTemplate ...

  8. Win10 UWP开发系列:使用VS2015 Update2+ionic开发第一个Cordova App

    安装VS2015 Update2的过程是非常曲折的.还好经过不懈的努力,终于折腾成功了. 如果开发Cordova项目的话,推荐大家用一下ionic这个框架,效果还不错.对于Cordova.PhoneG ...

  9. Win10 UWP开发系列:实现Master/Detail布局

    在开发XX新闻的过程中,UI部分使用了Master/Detail(大纲/细节)布局样式.Win10系统中的邮件App就是这种样式,左侧一个列表,右侧是详情页面.关于这种 样式的说明可参看MSDN文档: ...

随机推荐

  1. idea列编辑模式

    当我们想要选中一列时,在eclipse中alt+shit+a就可以选中一列了, 在网上很多的idea中列编辑的使用,但是对我的电脑却不管用,也不太清楚在哪里设置 最后无奈乱试一通,结果找到了 alt+ ...

  2. 批量或者选择导出datagrid列表数据到表格

    //导出项目信息 function exportXmxx(){ //判断是否选择站址 var index = $("#dgObj").datagrid('getChecked'); ...

  3. python ASCII编码集

  4. Nova中的Hook机制

    Nova的代码中支持Hook机制,也就是在某些函数的前后,可以加入自己的代码逻辑.Hook代码可以完全独立于Nova开发,本质上使用setuptools的entry points机制.K版本的Open ...

  5. @codeforces - 117C@ Cycle

    目录 @description@ @solution@ @accepted code@ @details@ @description@ 给定一个竞赛图(有向完全图),请找出里面的某个三元环,或者判断不 ...

  6. 「BZOJ2654」tree

    「BZOJ2654」tree 最小生成树+二分答案. 最开始并没有觉得可以二分答案,因为答案并不单调啊. 其实根据题意,白边的数目肯定大于need条,而最小生成树的白边数并不等于need(废话),可以 ...

  7. @noi.ac - 507@ 二分图最大权匹配

    目录 @description@ @solution@ @accepted code@ @details@ @description@ 有一天你学了一个能解决二分图最大权匹配的算法,你决定将这个算法应 ...

  8. Laravel 中 validation 验证 返回中文提示 全局设置

    <?php return [ /* |-------------------------------------------------------------------------- | V ...

  9. oracle中 =: 和 := 分别是什么意思

    oracle中 =: 和 := 分别是什么意思 =:应该相当于 a = :b 表明b是个绑定变量,需要执行时进行变量绑定:= 相当于一般编程语言中的 赋值 a := 1 即将 数字1赋值给变量 a

  10. [转]swagger2 入门教程

    swagger2 是一个规范和完整的框架,用于生成.描述.调用和可视化Restful风格的web服务,现在我们使用spring boot 整合它 作用: 1.接口的文档在线自动生成 2.功能测试 先介 ...