2011-06-29 24 views
0

我使用此方法調整ListView的大小,將其列調整到每個需要的空間並將剩餘空間添加到第二列,以便不出現水平滾動條。ListView - 計數實際可用區域

private void SetColumnWidths(object sender) 
    { 
     ListView listView = (sender as ListView); 

     if (listView != null) 
      if (listView.IsLoaded) 
      { 
       listView.UpdateLayout(); 

       GridView gridView = listView.View as GridView; 

       if (gridView != null) 
       { 
        UpdateColumnWidths(gridView); 

        listView.UpdateLayout(); 

        Decorator border = VisualTreeHelper.GetChild(listView, 0) as Decorator; 

        if (border != null) 
        { 
         ScrollViewer scroller = border.Child as ScrollViewer; 

         if (scroller != null) 
         { 
          ItemsPresenter presenter = scroller.Content as ItemsPresenter; 

          if (presenter != null) 
          { 
           double columnWidth = presenter.ActualWidth - 2; 

           for (int i = 0; i < gridView.Columns.Count; i++) 
           { 
            if (i != 1) 
             columnWidth -= gridView.Columns[i].ActualWidth; 
           } 

           if (columnWidth < 0) 
            columnWidth = 0; 

           gridView.Columns[1].Width = columnWidth; 
          } 
         } 
        } 
       } 
      } 
    } 

    private void UpdateColumnWidths(GridView gridView) 
    { 
     foreach (var column in gridView.Columns) 
     { 
      if (double.IsNaN(column.Width)) 
      { 
       column.Width = 0; 
       column.Width = double.NaN; 
      } 
     } 
    } 

一切工作就好了......直到BorderThickness來到城裏,無論是對ListView控件甚至最差的ListViewItem的模板。我希望你能幫我的是我如何檢索ListViewItem的模板BorderThickness,以便在不包含它的情況下開始調整大小過程。

或者甚至更好,你有什麼其他的想法,我怎麼可以找出ListView的實際可用區域,沒有邊框,滾動條,鼠標,貓,狗等?

預先感謝您!

回答

0

爲什麼不設置第二列寬= *和所有其他列寬= Auto?這將使所有列佔用所需的空間,第二列將佔用所有剩餘空間。

+0

GridViewColumn不支持*作爲寬度...至少在我使用的.net 3.5中。這在.Net 4中改變了嗎? – Dummy01

+0

@ Dummy01哇我從來沒有意識到*在GridViewColumns中不被支持......我一直使用DataGrid!如果您有興趣,可以在此網站上發佈兩種解決方法:http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/76b01ab0-df02-41eb-a040-8b985c463681/ – Rachel

0

我沒有找到任何其他解決方案,而不是將我的邊框的厚度設置爲ListViewItem模板中的左側和右側的0。隨着我的列大小調整是好的。不是最好的解決方案,但確定...