我有一个包含许多列的网格。
在小型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>
答案 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>