当前位置: 首页 > news >正文

WinUI3入门6:子线程处理UI 窗口加载后执行 获取和设置控件尺寸 自动生成事件代码框架

初级代码游戏的专栏介绍与文章目录-CSDN博客

我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。

这些代码大部分以Linux为目标但部分代码是纯C++的,可以在任何平台上使用。

源码指引:github源码指引_初级代码游戏的博客-CSDN博客

C#是我多年以来的业余爱好,新搞的东西能用C#的就用C#了。


        只是几个杂项功能,都不复杂。

目录

一、子线程处理UI

二、窗口加载后执行OnLoad

三、获取和设置控件尺寸

四、如何自动生成事件代码框架


一、子线程处理UI

        我们知道UI只能在UI线程上操作,自己创建的子线程直接调用UI处理可能会引发异常。

        在winforms里用Invoke就可以切换到UI线程执行,在WinUI3则略有不同,需要使用调度队列:

			this.DispatcherQueue.TryEnqueue(() =>{。。。。。。});

        形式上其实很相似,照着替换一下就行了。

二、窗口加载后执行OnLoad

        我们经常希望在窗体创建完毕后做一些处理,比如调整一下控件大小,一般在OnLoad之类处理就可以了。

        然而WinUI3限制很多,并没有OnLoad,Activated事件也不是在界面布局确定之后发生的,那么如何实现窗口加载后处理呢?

        一个通用的做法是用一个定时器,延迟若干毫秒之后执行,一般也是比较可靠的。更简洁的做法是使用调度任务,就像前面子线程处理UI那样,建立一个低优先级任务,就可以保证在界面创建之后尽快执行:

		public MainWindow(){this.InitializeComponent();。。。。。。//窗口显示之后的任务this.DispatcherQueue.TryEnqueue(DispatcherQueuePriority.Low,() =>{resize();});}private void resize(){ var button_width = button_do.ActualWidth;button_browser.Width = button_width;button_cancel.Width = button_width;Button_Tmp.Width = button_width;button_Hex.Width = button_width;button_SaveAs.Width = button_width;}

        注意DispatcherQueue.TryEnqueue的第一个参数DispatcherQueuePriority.Low,表示低优先级。

        这种方法比定时器好,感觉不到界面是显示之后发生了变化的。

        原来的效果:

        处理之后的效果:

        所有按钮都一样大了(由于选择的基准的原因,有一个按钮文字显示不全,我们可以通过选取最大的按钮来解决)。

三、获取和设置控件尺寸

        winforms的控件尺寸是可读可写的,读到的就是当前值,写入的就是新值,WinUI3控件尺寸区分实际值和设置值。

        比如上面的代码,获取空间实际宽度用ActualWidth,而Width值因为没有设置过,值是NaN。迁移代码的时候一定要注意。

四、如何自动生成事件代码框架

        如果使用Visual Studio,可以在编辑代码时自动生成事件代码框架。

        在xmal里输入到双引号的时候会自动提供帮助:

        “<新建事件处理程序>”就是自动创建框架出来:

 

        在C#代码里给事件添加处理程序也会自动提供帮助:

 

        提示按“Tab”自动创建:

 

        已经出现了建议的名字,可以改名字,也可以直接回车确认:

         这里默认代码抛出了异常,看来跟上面的不是一个人写的。


(这里是文档结束)

相关文章:

  • 解锁微服务潜能:深入浅出 Nacos
  • 从“看懂”到“行动”: VLM 与 VLA
  • 吃透 Golang 基础:Goroutine
  • 爱普生RX-8803LC时钟模块的特性与智能家居系统的连接方法
  • 可以媲美美颜相机的一款萌系美颜相机软件
  • 基于Uniapp+PHP的教育培训系统开发指南:网校源码实战剖析
  • 密室出逃消消乐小游戏微信流量主小程序开源
  • 【python】多次重试调用ai大模型
  • 数据结构第八章(五)-外部排序和败者树
  • Python PyMySQL【mysql适配器】 简介
  • 异地组网工具
  • C#建立与数据库连接(版本问题的解决方案)踩坑总结
  • python智慧物业管理系统
  • 树莓派5 安装Mysql (Docker + mariadb)方案
  • TensorFlow+CNN垃圾分类深度学习全流程实战教程
  • Camera Sensor接口协议全解析(一)开篇 - 数据管道,成像系统的生命线题】
  • 【Linux驱动开发 ---- 4_驱动开发框架和 API】
  • RK3588调试之旅:adbd服务配置全攻略
  • Android Automotive OS 的发展历程:从概念到智能汽车的核心
  • 靶场(二十五)---小白心得靶场体会---Access
  • 建网站怎么做/百度品牌广告多少钱一个月
  • proxy网站/西安高端网站建设
  • 熊掌号网站的基础建设费用/武汉seo公司出 名
  • 网站成功案例/淘宝seo推广优化
  • wordpress交易排行榜/seo优化顾问服务阿亮
  • 仙居做网站公司/百度竞价培训