項目中經常遇到一些問題,這些問題可能很簡單,但是之前從未遇到,可能經過了一番谷歌,也可能是查閱了MSDN,或是借鑒了大牛博客,逐漸有了些眉目,為了將這些東西落地,也為了將來之不易的東西記錄下來,以備今后查看,也希望能偶爾幫到一下遇到同樣問題的同仁,帶着這樣的目的開始了我的TestProjects系列。
這個系列就是一系列的Demo,帶着明確的目的寫的Demo,這些東西可能是常見用法的一個記錄,也可能是一個簡單的API接口,也可能是平時認識的盲區,也可能。。總之,可能對今后有幫助的,都在這里被記錄。
************************************那么 就從這里開始吧******************************************************
問題描述:WPF中DataGrid橫向滾動條無法拖動
進一步觀察:列頭拖動大小的時候到最右端就不能繼續再拖,始終無法超出DataGrid范圍
測試代碼:

<Window x:Class="DataGridTest.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="350" Width="525"> <Grid> <TabControl> <TabItem Header="會出現橫向滾動條"> <Grid> <Grid.RowDefinitions > <RowDefinition Height="15"/> <RowDefinition Height="*"/> </Grid.RowDefinitions> <DataGrid x:Name="testDataGrid" HorizontalScrollBarVisibility="Visible" AutoGenerateColumns="False" Grid.Row="1"> <DataGrid.Columns> <DataGridTextColumn Header="header1" Binding="{Binding Data1}" Width="auto"/> <DataGridTextColumn Header="header2" Binding="{Binding Data2}" Width="auto"/> <DataGridTextColumn Header="header3" Binding="{Binding Data3}" Width="auto"/> <DataGridTextColumn Header="header4" Binding="{Binding Data4}" Width="auto"/> <DataGridTextColumn Header="header5" Binding="{Binding Data5}" Width="auto"/> </DataGrid.Columns> </DataGrid> </Grid> </TabItem> <TabItem Header="不會出現橫向滾動條"> <Grid> <Grid.RowDefinitions > <RowDefinition Height="15"/> <RowDefinition Height="*"/> </Grid.RowDefinitions> <TextBlock Grid.Row="0" Text="123123" VerticalAlignment="Center" HorizontalAlignment="Center"/> <DataGrid x:Name="testDataGrid2" HorizontalScrollBarVisibility="Visible" VerticalScrollBarVisibility="Visible" AutoGenerateColumns="False" Grid.Row="1"> <DataGrid.Columns> <DataGridTextColumn Header="header1" Binding="{Binding Data1}" Width="0.2*"/> <DataGridTextColumn Header="header2" Binding="{Binding Data2}" Width="0.2*"/> <DataGridTextColumn Header="header3" Binding="{Binding Data3}" Width="0.2*"/> <DataGridTextColumn Header="header4" Binding="{Binding Data4}" Width="0.2*"/> <DataGridTextColumn Header="header5" Binding="{Binding Data5}" Width="0.2*"/> </DataGrid.Columns> </DataGrid> </Grid> </TabItem> </TabControl> </Grid> </Window>

using System.Collections.Generic; using System.Windows; namespace DataGridTest { /// <summary> /// MainWindow.xaml 的交互邏輯 /// </summary> public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); IList<DataSourceEntity> entitys = new List<DataSourceEntity>(); for (int i = 1; i < 20; i++) { entitys.Add(new DataSourceEntity(i * 10000)); } testDataGrid.ItemsSource = entitys; testDataGrid2.ItemsSource = entitys; } } public class DataSourceEntity { public DataSourceEntity(int i) { Data1 = i; Data2 = i; Data3 = i; Data4 = i; Data5 = i; Data6 = i; } public int Data1 { get; set; } public int Data2 { get; set; } public int Data3 { get; set; } public int Data4 { get; set; } public int Data5 { get; set; } public int Data6 { get; set; } } }
結論:
/*
* 目的:探測滾動條何種情況不會滾動
*
* 結論:
* 蛋疼的設計,當DataGrid列寬按比列指定的時候,resize列寬,最大不會超過DataGrid寬度,所以無論
* 如何都不會出現滾動條,要想使用,需要指定列的寬度,或者設置為Auto也是可以的
* 此外,影響是否出現滾動條的因素還有很多,例如放到Grid中后,Grid高寬如果使用了Auto,
* 初始化的時候也是不會顯示的,這種比較容易發現,因為使用HorizontalScrollBarVisibility或者
* VerticalScrollBarVisibility還是很容易發現滾動條位置的
*/