WPF网格水平滚动条,而不是调整列大小
我有一个有许多列的网格 在小型pc屏幕上,列会自动调整大小。我想要一个水平滚动条(不调整列的大小),而不是这个默认行为 如果我在每列上设置MinWidth属性,我就有了滚动条,但我不能再调整列的大小(空间不够)。 我也无法成功使用ScrollViewer(这损害了性能) 如何获得滚动条并调整列的大小WPF网格水平滚动条,而不是调整列大小,wpf,user-interface,datagrid,horizontal-scrolling,datagridcolumn,Wpf,User Interface,Datagrid,Horizontal Scrolling,Datagridcolumn,我有一个有许多列的网格 在小型pc屏幕上,列会自动调整大小。我想要一个水平滚动条(不调整列的大小),而不是这个默认行为 如果我在每列上设置MinWidth属性,我就有了滚动条,但我不能再调整列的大小(空间不够)。 我也无法成功使用ScrollViewer(这损害了性能) 如何获得滚动条并调整列的大小 <Grid> <DataGrid Height="200" Width="200" HorizontalScrollBarVisibility="Visible">
<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>
[...]
我尝试了您的代码,当数据不适合时,我得到了网格的滚动条,每列自动适合最大的文本大小,并且列可以调整大小
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>
公共部分类主窗口:窗口
{
公共主窗口()
{
初始化组件();
LoadData();
}
私有void LoadData()
{
DataTable foo=新的DataTable();
对于(int i=0;i<20;i++)
{
Add(新数据列(“列”+i,typeof(字符串));
}
对于(int i=0;i<20;i++)
{
DataRow dr=foo.NewRow();
foreach(foo.Columns中的数据列dc)
{
如果(i%5==0)
{
dr[dc]=string.Format(“单元的长宽数据值{0}”,i);
}
其他的
{
dr[dc]=string.Format(“单元格的数据值{0}”,i);
}
}
foo.Rows.Add(dr);
}
dataGrid.ItemsSource=foo.DefaultView;
}
私有无效按钮\u单击(对象发送者,路由目标e)
{
//cts.Cancel();
dataGrid.EnableRowVirtualization=!dataGrid.EnableRowVirtualization;
LoadData();
}
}