自定义日期时间选取器:获得一致的外观和感觉
本文关键字:外观 感觉 时间 日期 选取 自定义 | 更新日期: 2023-09-27 18:31:55
>我正在创建一个允许用户选择日期的自定义ComboBox
;日历显示是本地化的,使得内置DateTimePicker
是不需要的[有关更多信息,请参阅此处]。我需要 UI 控件来镜像外观或现有组件。以下是我尝试过的和遇到的问题:
- 使用带有绘制
ComboBox
按钮的TextBox
:我尝试使用ComboBoxRenderer.DrawDropDownButton
但外观并不反映现有的 UI 控件。特别是我们没有Application.EnableVisualStyles()
因此按钮具有Windows 98的外观和感觉。ComboBoxRenderer
画了一个有光泽的灰色按钮。 - 使用
ComboBox
和ToolStripDropDown
来包含日历控件:按钮具有正确的外观,但我无法完全隐藏下拉框。即使ToolStripControlHost
有效地隐藏了下拉框,当我单击该按钮时,我可以看到下拉框在显示ToolStripDropDown
之前呈现。我已经尝试了有效禁用下拉框的解决方法,但正如您所期望的那样,按钮无法保持按下的所需视觉状态(绘制按钮使我回到上一点中的问题)。将下拉框的高度设置为OnMeasureItem
不起作用;虽然我想我可以使下拉框与我的日历 UI 选择器高度相同,这样渲染看起来就不会特别糟糕。
是否有现有的机制来获取我需要的行为:一个显示所选日期的TextBox
,带有一个下拉箭头按钮,单击该按钮时会显示日历 UI 选择组件。日历组件已存在,按钮必须看起来像现有的 Windows 98 外观ComboBox
按钮。
感谢您的时间和帮助。
我找不到明确的解决方案,所以我实施了一个解决方法:我截取了处于正常和按下状态(没有悬停状态)的 Windows 98 样式按钮的屏幕截图,并将它们添加为图像资源(在 resx 文件中)。然后,我根据当前用户交互绘制图像。这会产生多种后果,包括:对视觉样式的任何更改都不是无缝的,如果更改了控件高度,则按钮不会像其他ComboBox
实例一样调整大小。