2012-12-13 36 views
3

假設與2列的可調整大小的網格放置在DockPanel中內側(使得其填充所有空間中的話)。如何配置wpf數據網格具有相對大小並在列擴展時水平滾動?

當列具有寬度指定爲「1 *」,各列最初得到一半的空間。擴展列1 縮小了列2的相同數量。如此一來,水平滾動條不會顯示。 (這也意味着我無法擴展兩列,即組合寬度大於可見區域。)

當列的寬度指定爲「自動」(默認)時,每列自動調整爲max(單元格內容,列標題)。額外空間可能會留在最後一列右側。您可以縮小其他..水平滾動條如有必要,延長顯示每一列。

如何配置的WPF數據網格以同樣initally劃分可用空間並延長任何列不應該縮水任何其他列,即水平滾動條應該拿出,好像他們是配置了自動?

回答

1

這可能有助於::

dataGrid.Loaded+=new RoutedEventHandler(dataGrid_Loaded); 

void dataGrid_Loaded(object sender, EventArgs e) 
{ 
    DataGrid dataGrid = sender as DataGrid; 
    double width = dataGrid.ActualWidth; 
    int count = dataGrid.Columns.Count; 
    foreach (DataGridColumn col in dataGrid.Columns) 
    { 
     col.Width = width/count; 
    } 
} 
+0

當你設置這樣的寬度,結果模式是什麼?自動還是固定/像素? – Gishu

1

我認爲你需要設置一個靜態的寬度上每列這個工作。我建議使用一個轉換器,它需要您的DataGrid的寬度,並將其除以您擁有的列數#

我的博客上有一個相當簡單的MathConverter,我用它進行所有數學轉換。如果需要,還可以很容易地擴展到IMultiValueConverter。最終的結果會是這個樣子:

<DataGridTextColumn Width="{Binding ElementName=MyDataGrid, Path=ActualWidth, 
    Converter={StaticResource MathConverter}, [email protected]/2}" ... /> 

你甚至可以應用寬度的隱含風格<DataGrid.Resources>如果你不想指定它在每一列

<DataGrid.Resources> 
    <Style TargetType="{x:Type DataGridColumn}"> 
     <Setter Property="Width" 
       Value="{Binding ElementName=MyDataGrid, 
        Path=ActualWidth, 
        Converter={StaticResource MathConverter}, 
        [email protected]/2}" /> 
    </Style> 
</DataGrid.Resources>