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

Avalonia Calendar 日历控件遇到 Flyout 或者切换页面时出现的鼠标按下失效的解决方法

Avalonia Calendar 日历控件遇到 Flyout 或者切换页面时出现的鼠标按下失效的解决方法

省流:把事件订阅从 DataContextChanged 改为路由事件订阅

一、背景

出现的问题:当点击了日期后,第二次打开,鼠标偶尔仍然处于按下的状态擅自选择了一个日期并执行了事件。

image

这是一个点击按钮展开日历的一个控件,我们的 Xaml 和 Code-Behind C# 是这样写的:

        <Buttonx:Name="PART_Button"Width="100"Height="100"><Button.Flyout><Flyout><Calendar  DataContextChanged="Calendar_DataContextChanged"   /></Flyout></Button.Flyout></Button>
        private void Calendar_SelectedDatesChanged_1(object? sender, Avalonia.Controls.SelectionChangedEventArgs e){PART_Button.Flyout.Hide();}

二、解决方法

把事件订阅从 DataContextChanged 改为 路由事件订阅按钮

   <Buttonx:Name="PART_Button"Width="100"Height="100"><Button.Flyout><Flyout><Calendar Button.Click="Calender_ButtonClick" /></Flyout></Button.Flyout></Button>
        private void Calender_ButtonClick(object? sender, Avalonia.Interactivity.RoutedEventArgs e){if (e.Source is not CalendarDayButton) return;PART_Button.Flyout.Hide();}

三、如果路由事件写不上怎么办?

你可以在 Code-Behind C# 的代码部分随着控件初始化的时候附加,就像这样:

   <Buttonx:Name="PART_Button"Width="100"Height="100"><Button.Flyout><Flyout><Calendar x:Name="PART_Calendar" /></Flyout></Button.Flyout></Button>

C# 的部分请这样做。

        protected override void OnLoaded(RoutedEventArgs e){base.OnLoaded(e);PART_Calendar.RemoveHandler(Button.ClickEvent, Calender_ButtonClick); // 避免多个重复事件订阅导致触发多次PART_Calendar.AddHandler(Button.ClickEvent, Calender_ButtonClick);}private void Calender_ButtonClick(object? sender, Avalonia.Interactivity.RoutedEventArgs e){if (e.Source is not CalendarDayButton) return;PART_Button.Flyout.Hide();}
http://www.rkmt.cn/news/2121.html

相关文章:

  • Vue 2 + Element UI 技术栈的管理端项目和Git使用教程
  • ubuntu22.04.5系统重启后网络配置消失问题
  • 第十届计算机技术与机械电气工程国际学术论坛(ISCME 2025)暨2025年泰山学术论坛-鲁东大学微纳传感器及系统专题论坛
  • FinRL(2)China_A_share_market_tushare.ipynb
  • 应急响应:某网站被挂非法链接
  • 用惯了VO,什么时候需要DTO?
  • WPF 警惕 StylusPlugIn 的多线程安全问题
  • RAG or 微调
  • 什么是AI CRM(人工智能客户关系管理)
  • 完整教程:WPF WriteableBitmap 高性能双缓冲图片显示方案
  • cache的基本原理
  • 如何用 vxe-table 实现2个树表格可以互相拖拽数据
  • CSP 初赛必背
  • 最新安卓版16音轨简谱编辑器软件使用说明
  • 【URP】Unity超分辨率优化实践
  • 0125_命令模式(Command)
  • 通过 GitHub 仓库下载微信 Mac Windows 历史版本(Rodert 提供)
  • 使用GoLang执行Shellcode的技术解析
  • cidr Not Available
  • mongodb 慢查询模拟
  • [序列化/JSON/Java/Utils] JACKSON 概述
  • P11696 [JRKSJ ExR] 七影蝶 题解
  • P11967 [GESP202503 八级] 割裂 题解
  • OpenSSH漏洞修复
  • some plan
  • 复杂背景验证码的识别思路与图像处理方法
  • Symfony学习笔记 - The Symfony Framework Best Practices
  • UniApp 自定义导航栏
  • NOIP2024复盘
  • 题解:CF351B Jeff and Furik