2017-04-23 81 views
0

在帶有View = List的C#ListView中,底部有空白區域,爲滾動條保留。奇怪的是,設置Scrollable = false只會增加這個未使用空間的大小。C#ListView,View = List - 如何擺脫底部未使用的空間?

我該如何擺脫這個空間或確保它用來顯示物品?

編輯: 我在Windows窗體應用程序中遇到此問題。

編輯2:該問題似乎與某種程度上的字體大小相結合。我需要的字體大小是9磅。用11磅這個問題不會出現。我也嘗試過Item spacing in ListView where View=List,但這也沒有幫助。

編輯4:它發生在Win7下的Win7主題。但是,至少在Scrollable = false的情況下,經典主題不會發生這種情況。

Unused space at the bottom of ListView, View=List

+0

這可能有助於http://stackoverflow.com/questions/1561780/wpf-listview-scrollbar-visible-to-false –

+2

如何將一個WPF解決方案的幫助? - 這真的很奇怪。我從來沒有使用列表模式,但仍然.. - 看起來有點像它試圖適應12個11pt字體的項目。沒有意義.. – TaW

+0

我認爲你是在做某件事。問題出現在9pt字體中。如果我將其更改爲11,則空間不見了!看起來幾乎像listView有一些內部參考高度來計算適合一列的項目的數量,並且當字體大小改變時它不會被正確更新。 – Simeon

回答

0

仍然希望一個更優雅的解決方案,但現在,我發現這個解決辦法:

可以使用一個面板擺脫多餘的空間。我從TaW的答案中得到了這個想法Add padding to last ListView item in WinForms

請記住,這對我很有用,因爲我不需要或不需要滾動條。

 listView1.Scrollable = true; 
     int itemHeight = listView1.GetItemRect(0).Height; 
     int numItemsPerColumn = 10; 
     //One needs to add 21 to the height, because even if no Scrollbar 
     //is needed, that space will stay reserved. 
     listView1.Size = new Size(500, itemHeight * numItemsPerColumn + 21); 
     Panel P = new Panel(); 
     P.BackColor = listView1.BackColor; 
     P.Location = listView1.Location; 
     //The height you actually want 
     P.Size = new Size(500, itemHeight * numItemsPerColumn + 4); 
     P.BorderStyle = listView1.BorderStyle; 
     listView1.BorderStyle = BorderStyle.None; 
     listView1.Parent = P; 
     listView1.Location = new Point(0, 0); 
     this.Controls.Add(P);