DataGrid横向滚动条没法拖动的问题

项目中常常遇到一些问题,这些问题可能很简单,可是以前从未遇到,可能通过了一番谷歌,也多是查阅了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>
XAML
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; }
    }

    
}
CodeBehind

结论设计

  /*
     * 目的:探测滚动条何种状况不会滚动
     *
     * 结论:
     * 蛋疼的设计,当DataGrid列宽按比列指定的时候,resize列宽,最大不会超过DataGrid宽度,因此不管
     * 如何都不会出现滚动条,要想使用,须要指定列的宽度,或者设置为Auto也是能够的
     * 此外,影响是否出现滚动条的因素还有不少,例如放到Grid中后,Grid高宽若是使用了Auto,
     * 初始化的时候也是不会显示的,这种比较容易发现,由于使用HorizontalScrollBarVisibility或者
     * VerticalScrollBarVisibility仍是很容易发现滚动条位置的
     */code

相关文章
相关标签/搜索