自定义日期时间选取器:获得一致的外观和感觉

本文关键字:外观 感觉 时间 日期 选取 自定义 | 更新日期: 2023-09-27 18:31:55

>我正在创建一个允许用户选择日期的自定义ComboBox;日历显示是本地化的,使得内置DateTimePicker是不需要的[有关更多信息,请参阅此处]。我需要 UI 控件来镜像外观或现有组件。以下是我尝试过的和遇到的问题:

  • 使用带有绘制ComboBox按钮的TextBox:我尝试使用ComboBoxRenderer.DrawDropDownButton但外观并不反映现有的 UI 控件。特别是我们没有Application.EnableVisualStyles()因此按钮具有Windows 98的外观和感觉。 ComboBoxRenderer画了一个有光泽的灰色按钮。
  • 使用ComboBoxToolStripDropDown来包含日历控件:按钮具有正确的外观,但我无法完全隐藏下拉框。即使ToolStripControlHost有效地隐藏了下拉框,当我单击该按钮时,我可以看到下拉框在显示ToolStripDropDown之前呈现。我已经尝试了有效禁用下拉框的解决方法,但正如您所期望的那样,按钮无法保持按下的所需视觉状态(绘制按钮使我回到上一点中的问题)。将下拉框的高度设置为 OnMeasureItem 不起作用;虽然我想我可以使下拉框与我的日历 UI 选择器高度相同,这样渲染看起来就不会特别糟糕。

是否有现有的机制来获取我需要的行为:一个显示所选日期的TextBox,带有一个下拉箭头按钮,单击该按钮时会显示日历 UI 选择组件。日历组件已存在,按钮必须看起来像现有的 Windows 98 外观ComboBox按钮。

感谢您的时间和帮助。

自定义日期时间选取器:获得一致的外观和感觉

我找不到明确的解决方案,所以我实施了一个解决方法:我截取了处于正常按下状态(没有悬停状态)的 Windows 98 样式按钮的屏幕截图,并将它们添加为图像资源(在 resx 文件中)。然后,我根据当前用户交互绘制图像。这会产生多种后果,包括:对视觉样式的任何更改都不是无缝的,如果更改了控件高度,则按钮不会像其他ComboBox实例一样调整大小。