WPF网格水平滚动条而不是列大小调整

时间:2018-05-15 18:00:19

标签: wpf user-interface datagrid horizontal-scrolling datagridcolumn

我有一个包含许多列的网格。

在小型PC屏幕上,列会自动调整大小。我想要一个水平滚动条(而不是要调整大小的列),而不是这个默认行为。

如果我在每列上设置MinWidth属性,我有滚动条,但我不能再调整列的大小(没有足够的空间)。 我也无法通过ScrollViewer取得成功(这会影响表演)。

如何获取滚动条并能够调整列的大小?

<Grid>
    <DataGrid Height="200" Width="200" HorizontalScrollBarVisibility="Visible">
        <DataGrid.Columns>
            <DataGridTextColumn Header="Column 1" Binding=.../>
            <DataGridTextColumn Header="Column 2" Binding=.../>
            <DataGridTextColumn Header="Column 3" Binding=.../>
            <DataGridTextColumn Header="Column 4" Binding=.../>
           [...]
        </DataGrid.Columns>
    </DataGrid>
</Grid>

1 个答案:

答案 0 :(得分:0)

我尝试了你的代码,当数据不适合时,我得到网格的滚动条,每列自动适合最大的文本大小,并且列可以调整大小。

public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            LoadData();
        }
       private void LoadData()
        {
            DataTable foo = new DataTable();
            for (int i = 0; i < 20; i++)
            {
                foo.Columns.Add(new DataColumn("column" + i, typeof(String)));
            }
            for (int i = 0; i < 20; i++)
            {
                DataRow dr = foo.NewRow();
                foreach (DataColumn dc in foo.Columns)
                {
                    if(i%5 ==0)
                    {
                        dr[dc] = string.Format("Looong and wide Data value {0} for cell.", i);
                    }
                    else
                    {
                        dr[dc] = string.Format("Data value {0} for cell.", i);
                    }
                }
                foo.Rows.Add(dr);
            }
            dataGrid.ItemsSource = foo.DefaultView;
        }
        private void Button_Click(object sender, RoutedEventArgs e)
        {
            //cts.Cancel();
            dataGrid.EnableRowVirtualization = !dataGrid.EnableRowVirtualization;
            LoadData();
        }

    }
<Window x:Class="WpfApp1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApp1"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Grid>
        <Button Click="Button_Click" Content="Toggle Virtualization" HorizontalAlignment="Left" Margin="59,47,0,0" VerticalAlignment="Top" Width="75"/>
        <DataGrid HorizontalAlignment="Left" x:Name="dataGrid" AutoGenerateColumns="True"
             Width="695"     Height="257" Margin="59,93,0,0" 
                  VerticalAlignment="Top" > 
        </DataGrid> 
    </Grid>
</Window>