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>
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還是很容易發現滾動條位置的
     */


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM