HandyControl
HandyControl copied to clipboard
AutoCompleteTextBox 中文输入会崩溃
Describe the bug
使用AutoCompleteTextBox 时,输入中文时程序崩溃。
Steps to reproduce the bug
在Demo测试也必现
Expected behavior
No response
Screenshots
NuGet package version
HandyControl 3.3.0
IDE
Visual Studio 2019
Framework type
.Net 5.0
Windows version
May 2021 Update (19043)
Additional context
No response
仔细测试了一下,用非微软的输入法会崩溃,微软自带的输入法无问题
二测之后,发现单独使用TextBox就不会出问题,只有在使用AutoComplete 的 TextBox会崩溃,应该是代码写法上的不兼容 @NaBian
能否提供有关的堆栈信息?
没有办法try ,全局也没有截住,我是用的rider,自动反编译后 崩溃到了, MS.Internal.Invariant
老哥你可以直接调试handyOrg的 Demo 的 AutoCompleteTextBox 那项,使用三方输入法,中文输入同样会崩溃。
网上有相关WPF 三方输入法崩溃的信息,但是都没有提到解决办法,我只是奇怪的是 我只单独用Textbox却是 不会崩溃,应该有办法闭规?
@NaBian
一样的问题,在官方demo下,自动补全文本框,输入中文,在QQ输入法下会出现,一直点击一个字母即可复现。搜狗输入法不会。 看两者的表现我推测原因是这样,搜狗输入法的时候输入的中间字母是在搜狗输入法的控件上,而QQ输入法是在自动补全框这个控件上,应该和这个有一些关系。
搜狗输入法中间状态
QQ输入法中间状态
一样的问题,在官方demo下,自动补全文本框,输入中文,在QQ输入法下会出现,一直点击一个字母即可复现。搜狗输入法不会。 看两者的表现我推测原因是这样,搜狗输入法的时候输入的中间字母是在搜狗输入法的控件上,而QQ输入法是在自动补全框这个控件上,应该和这个有一些关系。
自带的TextBox不会有问题,应该是封装后导致的
我最近也在追一个 IME 问题,感觉和这个是完全不同的两个问题,但可以参考一下。没有解决的方法,只是记录一下问题
https://github.com/dotnet/wpf/issues/6463
可以确定基本上是SetCurrentValue(IsDropDownOpenProperty, ValueBoxes.TrueBox);这句导致的报错,因为注释掉这句出现的2个地方就不会报异常,至于异常原因,我怀疑可能和IsDropDownOpen内部的一些操作有关系,他注册了2个函数,至于解决方案,可以定义一个IsDropDownOpen2的依赖属性,然后把popup的IsOpen绑定到IsDropDownOpen2上面,经过测试不会再出现异常。
在AutoCompleteTextBox.cs中加入这两句可以暂时解决这个问题
public new static readonly DependencyProperty IsDropDownOpenProperty = DependencyProperty.Register("IsDropDownOpen", typeof(bool), typeof(ComboBox), new FrameworkPropertyMetadata(ValueBoxes.FalseBox, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault)); public new bool IsDropDownOpen { get { return (bool) GetValue(IsDropDownOpenProperty); } set { SetValue(IsDropDownOpenProperty, ValueBoxes.BooleanBox(value)); } }