我正面临一个问题。在我看来,我有一个DataGrid,其水平滚动条的可见性设置为自动。我面临的问题是,即使有足够的空间让DataGrid扩展并完全显示自己,滚动条也会一直出现。我已经尝试了几乎所有的东西,但无法弄清楚什么是错的。
我上传了一个示例应用程序来演示问题here。希望有人能指出我正在犯的错误。
答案 0 :(得分:0)
您需要删除为所有数据网格列设置的MinWidth,您还可以设置数据网格列Width =“*”以填充所有可用空间。见下面的代码
好的,我发现它,请从m_MainGrid和m_DataGrid中删除HorizontalAlignment,此外,删除m_MainGrid中的所有ColumnDefinitions。我在你的解决方案上尝试了它并且它有效。
<Window x:Class="Data_Grid_Issue.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>
<Grid Margin="50" >
<Grid.RowDefinitions>
<RowDefinition Height="50"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<Border x:Name="m_Border" CornerRadius="5,5,0,0" BorderBrush="Black" Margin="20,0,0,0"
BorderThickness="1,1,1,0" HorizontalAlignment="Left" Background="LightBlue"
Width="{Binding ElementName=m_DataGrid, Path=ActualWidth}">
<Label Content="Hello" HorizontalAlignment="Center"/>
</Border>
<Grid x:Name="m_MainGrid" Grid.Row="1">
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<!--<Grid.ColumnDefinitions>
<ColumnDefinition Width="{Binding ElementName=col1, Path=ActualWidth}" />
<ColumnDefinition Width="{Binding ElementName=col2, Path=ActualWidth}" />
<ColumnDefinition Width="{Binding ElementName=col3, Path=ActualWidth}" />
<ColumnDefinition Width="{Binding ElementName=col4, Path=ActualWidth}" />
</Grid.ColumnDefinitions>-->
<DataGrid ScrollViewer.ScrollChanged="m_DataGrid_ScrollChanged" Width="Auto" x:Name="m_DataGrid" ItemsSource="{Binding Path= Testing}"
AutoGenerateColumns="False" Margin="0,0,0,0" EnableRowVirtualization="True"
RowHeaderWidth="20" Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="4"
VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto">
<DataGrid.Columns>
<DataGridTextColumn Width="Auto" Binding="{Binding Path=a}" MinWidth="200"
x:Name="col1" Header="Col1"></DataGridTextColumn>
<DataGridTextColumn Width="Auto" Binding="{Binding Path=b}" MinWidth="200"
x:Name="col2" Header="Col2"></DataGridTextColumn>
<DataGridTextColumn Width="Auto" Binding="{Binding Path=c}" MinWidth="200"
x:Name="col3" Header="Col3"></DataGridTextColumn>
<DataGridTextColumn Width="Auto" Binding="{Binding Path=d}" MinWidth="200"
x:Name="col4" Header="Col4"></DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
</Grid>
</Grid>
</Grid>
答案 1 :(得分:0)
我做了以下更改/解决方法来解决问题。它可能不是完美的解决方案,但对我有用。
我在Grid
中添加了两个列,一个在开头,另一个在最后。
<Grid.ColumnDefinitions>
<ColumnDefinition Width="{Binding ElementName=m_DataGrid, Path=RowHeaderWidth}" />
<ColumnDefinition Width="{Binding ElementName=col1, Path=ActualWidth}" />
<ColumnDefinition Width="{Binding ElementName=col2, Path=ActualWidth}" />
<ColumnDefinition Width="{Binding ElementName=col3, Path=ActualWidth}" />
<ColumnDefinition Width="{Binding ElementName=col4, Path=ActualWidth}" />
<ColumnDefinition x:Name="specialCol" />
</Grid.ColumnDefinitions>
然后我增加了ColumnSpan
DataGrid
...Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="6" ....
然后我在Constrcutor
Window
中添加了这一行
specialCol.Width = new GridLength (2);
并将UpdateGrid
方法更改为此
void UpdateGrid()
{
ScrollViewer scrollview = FindVisualChild<ScrollViewer>(m_DataGrid);
Visibility verticalVisibility = scrollview.ComputedVerticalScrollBarVisibility;
if (verticalVisibility == System.Windows.Visibility.Visible)
{
specialCol.Width = new GridLength(20);
m_Border.Width = m_DataGrid.ActualWidth - m_DataGrid.RowHeaderWidth - 17;
}
else
{
specialCol.Width = new GridLength(2);
m_Border.Width = m_DataGrid.ActualWidth - m_DataGrid.RowHeaderWidth;
}
}
在需要之前我没有看到任何HorizontalScrollBar