DataGrid横向滚动条无法拖动的问题
项目中经常遇到一些问题,这些问题可能很简单,但是之前从未遇到,可能经过了一番谷歌,也可能是查阅了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还是很容易发现滚动条位置的
*/