首页 > 其他分享 >记录-开发WPF项目中的一个疑惑

记录-开发WPF项目中的一个疑惑

时间:2023-03-30 13:45:31浏览次数:26  
标签:疑惑 记录 异常 Navigate Focus 目标 跳转 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()操作是多余的,真异常了,也没用;不异常,也没用,除非你在跳转界面的过程中想要在那个文本框中输入文本,但是,一般不会出现这种情况。最后,新的代码就不加这个操作了,旧的,暂时不管

标签:疑惑,记录,异常,Navigate,Focus,目标,跳转,WPF,导航
From: https://www.cnblogs.com/canwaiting/p/17272380.html

相关文章

  • DevExpress WPF的电子表格组件,让您更快获得Excel体验(二)
    DevExpress WPF的Spreadsheet控件拥有读取、写入、转换XLSx、XLS、CSV和TXT文件的功能,并且为终端用户提供了当今最流行的办公生产力套件才能获得的UI体验。它包括与Ribbon......
  • [做题记录] 构造题选做
    一、CF743C-Vladikandfractions(*1500)目标:给定\(n\),构造\(x,y,z\)满足\(x\neqy,x\neqz,y\neqz\)且\(\dfrac{2}{n}=\dfrac{1}{x}+\dfrac{1}{y}+\dfrac......
  • sql 过滤重复字段,取最早或最新记录
    --可以将重复字段,取最早的一次,同理,也可以取时间最新的一次--方法一withtmpas(selectrow_number()over(partitionby分组字段orderby时间字段)i,......
  • .NET6 WPF 获取显示屏全尺寸
    使用System.Windows.SystemParameters无法获取屏幕最大尺寸。解决问题办法:1.需要在WPF工程中引用Forms框架。项目右击》》》属性》》》选中为该项目启用windows窗......
  • 【Debug】记录在 Unreal Engine 使用中遇到的亿点小问题
    解决UE中的字体乱码问题问题描述:当你开开心心的导入字体,打算一展设计功底时,却发现字体乱码了 解决思路:                  ......
  • 流水账记录一下我的第一次跳槽
    前几天,当LinkedIn提示我即将在职一年时,我有些惊讶。时间过得真快。离我第一次跳槽完成已经一年了,现在是时候记录一下事情始末了。一个直观的感受是,这次跳槽是个正确的选择......
  • SQLServer查询执行过的SQL记录
    说明:仅支持sqlserver2008及以上版本通过下面的SQL语句可以查看Sqlserver执行的SQL记录,常用于SQL优化及辅助查找数据更新相关功能bug。1SELECTTOP10002ST......
  • 使用memset对数组进行赋值时可能会有的疑惑
    Memset(typename,intvalue,size) *第一个参数为变量的标识符,第二个要赋为数组的值,第三个为数组的大小(单位为字节,可用sizeof()表示)原理:memset是字节为单位进行复制......
  • [做题记录] 网络流 24 题
    I.飞行员配对方案问题https://www.luogu.com.cn/problem/P2756思路:建立一个源点\(S\),向外籍飞行员\(1\simm\)均连一条容量为\(1\)的边,每一对可以配对的都从外籍......
  • RabbitMQ 操作命令记录
    #RabbitMQ操作命令记录rabbitmqctladd_user<用户名><密码>#添加用户,去掉尖括号填写对应内容rabbitmqctlset_permissions-p/<用户名>".*"".*"".*"#添加......