背景

项目技术栈:C#,WPF
当前我想要实现点击某个按钮就可以跳转到某个界面,翻阅了项目中的代码,看到了

// 按钮事件
private void Btn_Click(object sender, RoutedEventArgs e)
{
LogBll.Instance.WriteSysLog("xxxxxxxxx");
NavigationService.Navigate(new Uri("xxxxx.xaml", UriKind.Relative));
this.TxtSearchBox.Focus(); //一个文本框
}

在我的猜测中,我以为是直接在Navigate调用之后就直接进入了对应的页面,然后等页面关闭或者是结束才回到当前这个函数


而实际上,是直接把整个函数执行完,然后再跳转到对应的界面

疑惑

// 1、这行代码还有什么用?
// 2、明明都跳到了B界面了,A界面的组件我还Focus干嘛?
this.TxtSearchBox.Focus(); //一个文本框

怀疑Focus操作是为了实现清除文本框文本,防止你输入了文本,然后跳转页面,页面结束后,文本还在
(证实为错误,不能实现清除操作)

解答

后来问了下导师,导师说是为了这行代码报异常,无法跳转到新页面,那么驻留在旧页面的时候。旧页面中要求TxtSearchBox组件是要一直保证焦点的,故才在下方插入Focus()操作

NavigationService.Navigate(new Uri("xxxxx.xaml", UriKind.Relative));

但实际上,我修改了xxxx.xaml改成一个不存在的界面,程序的确可以执行到Focus()操作,这是因为Navigate本来就是执行完整个函数才进行跳转的。Focust()执行了,我的焦点可以聚集吗?不可以,程序直接就报异常退出掉了

最后

实际上Navigate根本不会在生产环境中报异常,因为Navigate函数出现异常的情况为:


1. 没有为导航目标指定 URI。如果导航目标的URI为null或空,则会抛出ArgumentNullException异常。

2. 导航目标的URI格式不正确。如果导航目标的URI格式不正确,则会抛出UriFormatException异常。

3. 导航目标的XAML文件无法加载。如果导航目标是一个XAML文件,但该文件无法加载,则会抛出XamlParseException异常。

4. 导航目标不是一个有效的Page对象。如果导航目标不是一个有效的Page对象,则会抛出InvalidOperationException异常。

5. 导航目标的构造函数参数不正确。如果导航目标的构造函数需要传递参数,但参数不正确,则会抛出TargetInvocationException异常。

6. 导航目标的代码含有语法错误。如果导航目标的代码含有语法错误,则会抛出XamlParseException异常。


而这些情况,只要测试中不出现,那么生产中就不会出现,这些异常不会随着操作而出现,而是会因代码写错而出现


故Focus()操作是多余的,真异常了,也没用;不异常,也没用,除非你在跳转界面的过程中想要在那个文本框中输入文本,但是,一般不会出现这种情况。最后,新的代码就不加这个操作了,旧的,暂时不管

记录-开发WPF项目中的一个疑惑的更多相关文章

  1. oracle性能优化(项目中的一个sql优化的简单记录)

    在项目中,写的sql主要以查询为主,但是数据量一大,就会突出sql性能优化的重要性.其实在数据量2000W以内,可以考虑索引,但超过2000W了,就要考虑分库分表这些了.本文主要记录在实际项目中,一个 ...

  2. WPF项目中所遇到的一些问题集

    1. 没有Timer控件 解决方案: 第一步:申明一个DispatcherTimer 类的变量, private DispatcherTimer timer; //定时控件 第二步:初始化这个类 ti ...

  3. 如何在 GitHub 的项目中创建一个分支呢?

    如何在 GitHub 的项目中创建一个分支呢? 其实很简单啦,直接点击 Branch,然后在弹出的文本框中添加自己的 Branch Name 然后点击蓝色的Create branch就可以了,这样一来 ...

  4. 【Filter 不登陆无法访问】web项目中写一个过滤器实现用户不登陆,直接给链接,无法进入页面的功能

    在web项目中写一个过滤器实现用户不登陆,直接给链接,无法进入页面,而重定向到登陆界面的功能. 项目是用springMVC+spring+hibernate实现 (和这个没有多大关系) 第一步: 首先 ...

  5. Entity Framework 的小实例:在项目中添加一个实体类,并做插入操作

    Entity Framework 的小实例:在项目中添加一个实体类,并做插入操作 1>. 创建一个控制台程序2>. 添加一个 ADO.NET实体数据模型,选择对应的数据库与表(Studen ...

  6. WPF项目中解决ConfigurationManager不能用(转)

    https://blog.csdn.net/MOESECSDN/article/details/78107888 在WPF项目中遇到这样的问题,做一下笔记.希望对自己和读者都有帮助. 在aap.con ...

  7. 项目中的一个分页功能pagination

    项目中的一个分页功能pagination <script> //总页数 ; ; //分页总数量 $(function () { // $("#pagination"). ...

  8. Windows Presentation Foundation (WPF) 项目中不支持xxx的解决

    一般Windows Presentation Foundation (WPF) 项目中不支持xxx都是由于没引用相应的程序集导致,比如Windows Presentation Foundation ( ...

  9. Java项目中每一个类都可以有一个main方法

    Java项目中每一个类都可以有一个main方法,但只有一个main方法会被执行,其他main方法可以对类进行单元测试. public class StaticTest { public static ...

  10. 如何在 C# 项目中链接一个文件夹下的所有文件

    在 C# 项目中通过链接方式引入文件可以让我们在项目中使用这些文件中的代码.常见的比如链接 AssemblyInfo.cs 文件,这样我们就可以在项目中使用这个文件中的版本号等信息.但是如果我们想要链 ...

随机推荐

  1. JDK 7 HashMap 并发情况下的死锁问题

    目录 问题描述 详细解释 问题描述 JDK7的 HashMap 解决冲突用的是链表,在插入链表的时候用的是头插法,每次在链表的头部插入新元素.resize() 的时候用的依然是头插,头插的话,如果某个 ...

  2. 在教学中常被问到的几个vue3.x与typescript的问题,统一解答

    在教学当中,学生在学习vue3.x时,常常会问到typescript和vue3.x之间的关系,感觉这两个技术总是绑在一起的,下面老赵来统一解答一下: 那学vue3.x,为什么要求也要掌握typescr ...

  3. TypeScript 学习笔记 — infer 类型推导、类型兼容 (九)

    目录 1.ReturnType 返回值类型 2.Parameters 参数类型 3.InstanceType 实例类型 4.ConstructorParameters 构造函数参数类型 5.infer ...

  4. 主机CPU散热器过重可能导致系统不稳定

    CPU散热器越大,散热能力越强?其实散热器重量只是其中一个指标,还有风道设计也很重要.那么问题来了,为什么处理器散热器重量过重也可能导致系统运行不稳定? 本人用的配置为AMD R7 2700X 处理器 ...

  5. Android LineChart 折线图Demo

    1 首先在 build.gradle 里导入包 implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' 2.新建 启动Activity Li ...

  6. pta第一到第三次题目集

    (1)前言 pta第一次作业的7-1,7-2,7-4主要熟悉运用了 if-else 的语句使用,以及运用System.out.printf进行格式化输出,7-3九九乘法表主要学会了运用for循环及多重 ...

  7. 如何通过Java代码将添加页码到PDF文档?

    页码可以清楚了解总页数.定位页数快速寻找自己所要的文段.打印时不会分不清头中尾.很多人在使用办公软件的时候就会选择PDF进行文档的保存,因为PDF在保存之后不会出现乱码甚至是格式改变的情况.在PDF中 ...

  8. 从APNIC获取中国IP地址列表

    关于APNIC 全球IP地址块被IANA(Internet Assigned Numbers Authority)分配给全球三大地区性IP地址分配机构,它们分别是: ARIN (American Re ...

  9. Python3.8环境安装PyHook3

    Python3.8环境安装PyHook3 1. 安装python对应版本的pyhook3网  址:https://pypi.org/project/PyHook3/#files如果没有对应版本,请下载 ...

  10. Mybatis 框架下 SQL 注入攻击的方式

    前言 SQL注入漏洞作为WEB安全的最常见的漏洞之一,在java中随着预编译与各种ORM框架的使用,注入问题也越来越少. 新手代码审计者往往对Java Web应用的多个框架组合而心生畏惧,不知如何下手 ...