背景

项目技术栈: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. 如何通过C++ 将数据写入 Excel 工作表

    直观的界面.出色的计算功能和图表工具,使Excel成为最流行的个人计算机数据处理软件.在独立的数据包含的信息量太少,而过多的数据又难以理清头绪时,制作成表格是数据管理的最有效手段之一.这样不仅可以方便 ...

  2. MySql生成ER【StarUML】文件

    1. 背景 要画ER图,一个个打费时费力,StarUML文件打开是json.那么就有可能自动生成. 2. 效果 把表结构生成好,自己只要维护关系即可. 3. 代码 import lombok.Data ...

  3. BeautifulSoup模块的使用方法

    本篇文章主要讲bs4模块(BeautifulSoup),这个模块能做么呢?用一句话来概括的话:beautifulsoup4 从HTML或XML文件中提取数据的Python库,用它来解析爬取回来的xml ...

  4. scrcpy软件的使用

    一.scrcpy软件介绍: scrcpy是通过adb调试的方式来将手机屏幕投到电脑上,并可以通过电脑控制您的Android设备.它可以通过USB连接,也可以通过Wifi连接(类似于隔空投屏),而且不需 ...

  5. Spark Catalyst 查询优化器原理

    这里我们讲解一下SparkSQL的优化器系统Catalyst,Catalyst本质就是一个SQL查询的优化器,而且和 大多数当前的大数据SQL处理引擎设计基本相同(Impala.Presto.Hive ...

  6. 什么是mvvm?简单介绍它的概念、原理及实现

    1.MVVM的概念 model-view-viewModel,通过数据劫持+发布订阅模式来实现. mvvm是一种设计思想.Model代表数据模型,可以在model中定义数据修改和操作的业务逻辑;vie ...

  7. 关于springboot使用mybatis查询出现空指针,以及debug出现All Elements all Null的解决方法

    数据库中命名方式是带有下划线 ,然后在实体类中使用的是驼峰命名法 ,那么就需要在application.yml文件中加上 自闭了,那么简单的问题,没了解过真是摸不着头脑

  8. vue中 computed和watch的一些简单理解(区别)

    今天看到一个问题,就是vue的computed和watch要在哪些场景下使用,其实也就是在问他们的区别.computed也就是计算属性,它可以帮助我们将在模板中的一些稍微复杂的逻辑计算放回到js代码中 ...

  9. tidyr包几个函数的用法

    在R语言中,tidyr主要提供了一个类似Excel中数据透视表 (pivottable)的功能; gather和spread函数将数据在长格式和宽格式之间相互转化,应用在比如稀疏矩阵和稠密矩阵之间的转 ...

  10. 一键部署十个服务脚本--可拆分---java+mysql+redis+nginx+rocketmq..等等

    java + mysql +redis + minio + nginx + rocketmq + rocketmq-console + elasticsearch + kibana + logstas ...