Avalonia跨平台入门第三十八篇之IP输入框

💡 原文中文,约1700字,阅读约需4分钟。
📝

内容提要

本文介绍了IP输入框效果的实现方法,作者分享了自己基于WPF的实现代码,并解释了事件处理和输入过滤的方法。作者表示编程的乐趣在于解决bug和完成任务,鼓励读者继续学习和坚持。

🔎

延伸解读

现成控件在 DataGrid 中为何失效

作者尝试直接使用 Ursa.Avalonia 的 IP 输入框控件,单独使用时正常,但放入 DataGrid 后事件失效。作者引述回复建议将事件路由设为隧道模式。这提示在复杂容器中,事件可能被外层控件拦截或处理顺序改变,导致内部输入框无法响应。若遇到类似问题,可优先检查事件路由策略。

自定义实现的关键步骤

作者基于 WPF 版本自行实现,核心是重写 OnApplyTemplate,通过 NameScope 找到四个 TextBox 并绑定事件。监听 TextInput 和 KeyDownEvent,其中 KeyDownEvent 使用隧道路由(RoutingStrategies.Tunnel)添加处理器。TextInput 中用正则 [^0-9.] 过滤非数字和小数点字符,实现输入限制。

输入过滤的简单策略与局限

代码仅用正则 [^0-9.] 过滤输入,只允许数字和小数点。这能阻止字母等非法字符,但未处理多个小数点、IP 段范围(0-255)或粘贴内容等边界情况。作者也提到当前效果简单,未来可探索更复杂效果。若需健壮 IP 输入,还需补充校验逻辑。

❓

Q&A

如何实现IP输入框的效果?

可以通过WPF实现IP输入框效果,使用OnApplyTemplate方法绑定多个TextBox,并监听TextInput和KeyDownEvent事件。

在DataGrid中使用IP输入框时遇到什么问题?

在DataGrid中使用现成的代码时,事件可能会失效,建议将事件路由设置为隧道模式。

如何过滤IP输入框的输入?

可以使用正则表达式过滤输入,只允许数字和小数点,具体实现是在TextInput事件中处理输入。

作者对编程的看法是什么?

作者认为编程的乐趣在于解决bug和完成任务,鼓励读者坚持学习和探索。

如何处理TextInput事件?

在TextInput事件处理程序中,使用正则表达式检查输入,如果不符合要求则将e.Handled设置为true。

如何绑定多个TextBox到IP输入框?

在OnApplyTemplate方法中,通过e.NameScope.Find方法找到各个TextBox并调用AttachEvents方法进行事件绑定。

🏷️

标签

➡️

继续阅读