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

相關文章
相關標籤/搜索