DevExpress DateEdit 点击时间数字却选中上一项,如何排查?
结论
仅凭这段 XAML,无法确定具体原因,也不能认定是 Windows 11 IoT Enterprise LTSC 24H2 的缺陷。先区分两种情况:点击控件时就选错了项目,还是选中正确值后,数据绑定又把它改了。
两台设备分别显示 3 行和 5 行,这个差异值得优先追查。它可能说明时间选择器的实际布局不同,但不能据此判断原因是 DPI、触摸模式或 DevExpress 缺陷。原始材料没有提供 DevExpress 版本和实际截图,因此无法直接指定补丁或配置来修复。
先确认错误发生在哪一步
在问题设备上打开时间选择器,点击一个未选中的数字,同时观察中间选中项、编辑框中的时间,以及 TestTimeField.Value 最终收到的值。
- 如果中间选中项立即变成上一项,先检查选择器布局、输入方式和控件本身。
- 如果中间先选中正确数字,随后又回退,检查绑定属性的 setter、转换逻辑、校验逻辑,以及是否有其他代码重新赋值。
- 如果弹出列表选中正确,只有编辑框显示不同,继续检查实际值与格式化显示之间的关系。
Mask="HH:mm" 和 MaskUseAsDisplayFormat="True" 用于时间输入与显示格式。不能以修改这些格式设置作为修复点击偏移的依据。原配置中的 StringFormat 也应与交互问题分开验证。
用无绑定示例缩小范围
在一个没有自定义样式和额外布局变换的 WPF 窗口中放置下面的控件,并在两台设备上运行同一个构建产物:
<dxe:DateEdit
x:Name="TestTimeFieldControl"
HorizontalAlignment="Stretch"
VerticalAlignment="Center"
Mask="HH:mm"
MaskUseAsDisplayFormat="True"
ShowClearButton="False">
<dxe:DateEdit.StyleSettings>
<dxe:DateEditPickerStyleSettings />
</dxe:DateEdit.StyleSettings>
</dxe:DateEdit>
在窗口的 InitializeComponent() 之后设置一个固定值:
TestTimeFieldControl.EditValue = new System.DateTime(2026, 1, 1, 9, 56, 0);
这里的日期只是测试数据,用于固定初始时间。
如果无绑定示例仍然选错,可以暂时把 TestTimeField.Value 的业务逻辑排除出主要排查范围。如果示例正常,就逐步恢复原页面的主题、样式、父容器和绑定,找到问题重新出现的条件。
优先比较输入方式和列表布局
先在问题设备上分别用鼠标和触摸操作,记录首次打开弹出框、第一次点击和后续点击时的表现。
如果只有某一种输入方式出现偏差,或者切换输入方式后列表从 3 行变为 5 行,应检查应用是否启用了随输入方式变化的触摸界面设置。具体设置名称和支持范围需要以项目实际使用的 DevExpress 版本为准。
还要观察点击瞬间的行高、字体大小、选中区域高度或可见行数是否发生变化。如果布局在按下与释放之间改变,需要继续确认它是否与错误选中同时发生,不能仅凭外观差异下结论。
“大于 20 的小时数正常”也是一个重要的复现条件。测试时应保留这一规律,并记录出错数字原本位于选中区域上方还是下方,以区分问题与数字本身有关,还是与列表位置有关。
检查 DPI、主题和运行环境
建议按以下顺序比较,每次只改变一个条件:
- 确认两台设备运行同一个应用构建,加载的 DevExpress 程序集版本一致。
- 记录显示分辨率、Windows 显示缩放比例、是否使用多显示器,以及是否通过远程桌面运行。
- 在问题设备上临时使用 100% 显示缩放,完全退出并重新启动应用后复测。
- 在最小示例中使用相同的 DevExpress 主题,并检查原应用是否覆盖了字体、行高、控件模板或布局变换。
如果调整缩放后问题消失,只能说明问题与缩放条件有关,还需要结合应用的 DPI 配置和控件版本继续定位。100% 缩放可以用于验证假设,不宜直接视为最终修复。
两台设备的 Windows 版本不同,也只是一个环境差异。应先控制控件版本、主题、缩放和输入方式,再判断操作系统版本是否是触发条件。
根据复现结果选择修复方式
如果问题来自绑定回写,应修正对应的赋值或转换逻辑;如果来自自定义样式或布局,应缩小到具体覆盖项后再调整。
如果最小示例在固定输入方式、主题和缩放条件下仍能复现,下一步应核对该 DevExpress 版本的已知问题和修复记录,并在独立环境中验证适用的维护版本。提交给 DevExpress 支持时,附上最小项目、程序集版本、系统版本、缩放比例和点击前后的录屏,会更便于定位。
需要临时继续使用时,可以先验证编辑框直接输入 HH:mm 是否正常,并确认输入值能正确保存。不要用“选中值加 1”的方式补偿:目前偏差并非对所有小时都存在,这种处理会让原本正常的选择产生错误。
备注:内容仅供参考。
