項目中常常遇到一些問題,這些問題可能很簡單,可是以前從未遇到,可能通過了一番谷歌,也多是查閱了MSDN,或是借鑑了大牛博客,逐漸有了些眉目,爲了將這些東西落地,也爲了未來之不易的東西記錄下來,以備從此查看,也但願能偶爾幫到一下遇到一樣問題的同仁,帶着這樣的目的開始了個人TestProjects系列。ide
這個系列就是一系列的Demo,帶着明確的目的寫的Demo,這些東西多是常見用法的一個記錄,也多是一個簡單的API接口,也多是平時認識的盲區,也可能。。總之,可能對從此有幫助的,都在這裏被記錄。測試
************************************那麼 就從這裏開始吧******************************************************
問題描述:WPF中DataGrid橫向滾動條沒法拖動
進一步觀察:列頭拖動大小的時候到最右端就不能繼續再拖,始終沒法超出DataGrid範圍
測試代碼:spa
<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仍是很容易發現滾動條位置的
*/code