2011-06-29 19 views
0

このメソッドを使用して、リストビューのサイズを変更し、残りの領域を2番目の列に追加して、水平スクロールバーが表示されないようにします。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

2列目の幅を*、その他の列幅をすべてAutoに設定しないのはなぜですか?これにより、すべての列が必要なスペースを占めるようになり、2列目は残りのスペースをすべて占有します。

+0

GridViewColumnは、少なくとも私が使用している.Net 3.5では*幅としてサポートしていません。これは.NET 4で変更されていますか? – Dummy01

+0

@ Dummy01 * GridViewColumnsでは*がサポートされていなかったことは決してありません...私はいつもDataGridsを使用しました!興味がある場合は、このサイトに2つの回避策が掲載されています。http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/76b01ab0-df02-41eb-a040-8b985c463681/ – Rachel

0

私のListViewItemテンプレート内の境界線の太さを左右に0に設定するのではなく、他の解決策が見つかりませんでした。これで私の列サイズの調整はOKでした。最高の解決策ではありませんが、大丈夫です...

関連する問題