记录-开发WPF项目中的一个疑惑
背景
项目技术栈: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项目中的一个疑惑的更多相关文章
- oracle性能优化(项目中的一个sql优化的简单记录)
在项目中,写的sql主要以查询为主,但是数据量一大,就会突出sql性能优化的重要性.其实在数据量2000W以内,可以考虑索引,但超过2000W了,就要考虑分库分表这些了.本文主要记录在实际项目中,一个 ...
- WPF项目中所遇到的一些问题集
1. 没有Timer控件 解决方案: 第一步:申明一个DispatcherTimer 类的变量, private DispatcherTimer timer; //定时控件 第二步:初始化这个类 ti ...
- 如何在 GitHub 的项目中创建一个分支呢?
如何在 GitHub 的项目中创建一个分支呢? 其实很简单啦,直接点击 Branch,然后在弹出的文本框中添加自己的 Branch Name 然后点击蓝色的Create branch就可以了,这样一来 ...
- 【Filter 不登陆无法访问】web项目中写一个过滤器实现用户不登陆,直接给链接,无法进入页面的功能
在web项目中写一个过滤器实现用户不登陆,直接给链接,无法进入页面,而重定向到登陆界面的功能. 项目是用springMVC+spring+hibernate实现 (和这个没有多大关系) 第一步: 首先 ...
- Entity Framework 的小实例:在项目中添加一个实体类,并做插入操作
Entity Framework 的小实例:在项目中添加一个实体类,并做插入操作 1>. 创建一个控制台程序2>. 添加一个 ADO.NET实体数据模型,选择对应的数据库与表(Studen ...
- WPF项目中解决ConfigurationManager不能用(转)
https://blog.csdn.net/MOESECSDN/article/details/78107888 在WPF项目中遇到这样的问题,做一下笔记.希望对自己和读者都有帮助. 在aap.con ...
- 项目中的一个分页功能pagination
项目中的一个分页功能pagination <script> //总页数 ; ; //分页总数量 $(function () { // $("#pagination"). ...
- Windows Presentation Foundation (WPF) 项目中不支持xxx的解决
一般Windows Presentation Foundation (WPF) 项目中不支持xxx都是由于没引用相应的程序集导致,比如Windows Presentation Foundation ( ...
- Java项目中每一个类都可以有一个main方法
Java项目中每一个类都可以有一个main方法,但只有一个main方法会被执行,其他main方法可以对类进行单元测试. public class StaticTest { public static ...
- 如何在 C# 项目中链接一个文件夹下的所有文件
在 C# 项目中通过链接方式引入文件可以让我们在项目中使用这些文件中的代码.常见的比如链接 AssemblyInfo.cs 文件,这样我们就可以在项目中使用这个文件中的版本号等信息.但是如果我们想要链 ...
随机推荐
- 关于如何在IDEA里面配置好Git和Github的相关步骤详解
配置Git 1.File->settings 然后选择其中的Version Control: 接着选择其中的Git选项: 2.将文本框内容定位到本地下载git路径下面 然后点击右边的Test测试 ...
- 同步协程的必备工具: WaitGroup
1. 简介 本文将介绍 Go 语言中的 WaitGroup 并发原语,包括 WaitGroup 的基本使用方法.实现原理.使用注意事项以及常见的使用方式.能够更好地理解和应用 WaitGroup 来协 ...
- Ocelot使用与设置路由Routing
一.安装Ocelot 在程序包管理器控制台输入以下命令安装Ocelot Install-Package Ocelot 二.新建两个项目 我们新建两个.Net Core WebAPI项目如下: 直接 ...
- v-model 和 .sync
v-model的本质是父子组件间的通讯,父组件给子组件传递一个value自定义属性和input自定义事件:子组件接收value 并触发自定义事件修改value 父组件中 <Child v-mod ...
- CPU内部的奥秘:代码是如何被执行的?
我们是袋鼠云数栈 UED 团队,致力于打造优秀的一站式数据中台产品.我们始终保持工匠精神,探索前端道路,为社区积累并传播经验价值. 本文作者:景明 我们以一段 C 代码为例,来看一下代码被编译成二进制 ...
- 基于docker和cri-dockerd部署k8sv1.26.3
cri-dockerd是什么? 在 Kubernetes v1.24 及更早版本中,我们使用docker作为容器引擎在k8s上使用时,依赖一个dockershim的内置k8s组件:k8s v1.24发 ...
- Oracle安装及各种问题
--hsql 1:jdk 本机位置:E:\Program Files\Java\jdk1.7.0_80\ 安装教程:复制然后配置环境变量 (1)新建->变量名"JAVA_HOME&qu ...
- 在Blazor中使用Chart.js
1. 在Blazor中使用Chart.js 首先,从Chart.js官方网站下载Chart.js库文件. 推荐下载这个构建好的版本https://cdnjs.com/libraries/Chart.j ...
- Go For Web:踏入Web大门的第一步——Web 的工作方式
前言: 本文作为解决如何通过 Golang 来编写 Web 应用这个问题的前瞻,对 Golang 中的 Web 基础部分进行一个简单的介绍.目前 Go 拥有成熟的 Http 处理包,所以我们去编写一个 ...
- Arrays.asList() 示例
1 package Test.others; 2 3 import java.util.Arrays; 4 import java.util.Collections; 5 import java.ut ...