背景:大多數人都知道的
SysListView32
共同控制,由.NET框架提供等效包裝ListView
類。其內部的一點深度表明它提供的用於滾動其內容的滾動條是不是控制自己,但是由SysListView32
控制管理。強制顯示ListView中的滾動條?目標:總是繪製滾動條,即使它沒有
ListViewItems
顯示,或者只有很少的滾動條不需要滾動條;有點像模仿RichTextBox
類,其ScrollBars
屬性設置爲ForcedBoth
。或者有點像這樣ListBox
:
的問題(一個或多個):
- .NET有NO糖根本不在
ListView
內的滾動條。 - Win32文檔沒有指明何時顯示/隱藏和/或啓用/禁用滾動條。
- .NET有NO糖根本不在
我的解決方法(一個或多個):
override
在派生類的WndProc
和處理其WM_HSCROLL
和WM_VSCROLL
消息按照步驟2和3。- 呼叫
base.WndProc
做實際上需要處理滾動功能。 - 創建一個方法,如
WmScroll
並做我的立即處理它after
base.WndProc
已返回。 - 這包括對
GetScrollInfo
的p/invoke調用。確定是否實際需要滾動條。如果不是,則調用ShowScrollBar
和EnableScrollBar
,並使用所需的值繪製明顯禁用的滾動條。
問題與解決方法:
- 它幾乎沒有工作。滾動條顯示和禁用,但像Windows經典主題。
- 它隱藏了每個
ListViewGroup
的摺疊按鈕,使它們無用!
的描述圖像:
期待已久的實際問題:
如何強制滾動條永遠是Visible
內的ListView
不論ListViewItems
數目和禁用他們是否是不必要的,同時避免了尺寸的失算(顯示摺疊按鈕的ListViewGroup
s)和主題惡化?
答案沒有代碼,和答案與C#代碼,VB.NET和C++/CLR是受歡迎的。如果您使用.NET支持的任何其他語言發佈代碼,請留下指向我可能使用的代碼轉換網站的鏈接,如果代碼看起來,呃,不可理解。
有示出的ListView相關滾動條操縱一堆[在此Q + A](http://stackoverflow.com/q/24716049/1070452),其包括的PInvoke到'ShowScrollBar' – Plutonix
@Plutonix不錯的鏈接,但我不想根據是否出現滾動條來調整列的大小。我不想隱藏滾動條。我只是希望它們在整個ListView的整個生命週期中都存在。 –
鑑於系統似乎不想這樣做,並且列表視圖以標準形式完美工作,我不知道你的動機是什麼。 –