2012-04-23 19 views
0

我正在創建一個允許用戶選擇日期的自定義ComboBox;日曆顯示被本地化,使內置的DateTimePicker不受歡迎[請參閱here瞭解更多信息]。我需要UI控件來反映外觀和感覺或現有組件。以下是我已經試過,我已經遇到的問題:自定義DateTimePicker:獲得一致的外觀

  • 使用與繪製ComboBox按鈕TextBox:我一直在使用ComboBoxRenderer.DrawDropDownButton但細看嘗試和感覺不鏡像現有的UI控件。特別是我們沒有Application.EnableVisualStyles(),所以按鈕具有Windows 98的外觀和感覺。 ComboBoxRenderer繪製一個光滑的灰色按鈕。
  • 使用ComboBoxToolStripDropDown來包含日曆控件:該按鈕具有正確的外觀和感覺,但我無法完全隱藏下拉框。即使ToolStripControlHost實際上隱藏了下拉框,當我單擊該按鈕時,我可以看到正在顯示ToolStripDropDown之前呈現的下拉框。我已經嘗試了有效禁用下拉框的解決方法,但是按鈕(如您所期望的那樣)不會保持被按下的所需視覺狀態(並且繪製按鈕會使我回到上述問題中)。 在OnMeasureItem中將下拉框的高度設置爲零不起作用;儘管我想我可以使下拉框與我的日曆UI選擇器的高度相同,以便渲染看起來不會特別糟糕。

是否有現有的機制來獲得我需要的行爲:一個TextBox顯示選定日期下拉箭頭按鈕,點擊後,顯示日曆UI選擇組件。日曆組件已存在,並且按鈕必須看起來像現有的Windows 98外觀和感覺ComboBox按鈕。

謝謝你的時間和協助。

回答

0

我無法找到一個明確的解決辦法,所以我已經實現了一個解決辦法:我已經採取了Windows 98的樣式按鈕的截圖在正常按下狀態(不存在hover state)並將它們添加爲圖像資源(在resx文件中)。然後根據當前的用戶交互繪製圖像。這會帶來一些後果,包括:對視覺樣式的任何更改都不會無縫,並且如果控件高度發生更改,按鈕將不會像其他ComboBox實例一樣調整大小。