Горизонтальная полоса прокрутки всегда отображается в WPF DataGrid - PullRequest
2 голосов
/ 30 марта 2011

Я столкнулся с проблемой.На мой взгляд, у меня есть DataGrid, чья видимость горизонтальной полосы прокрутки установлена ​​на Авто.Проблема, с которой я сталкиваюсь, заключается в том, что полоса прокрутки появляется постоянно, даже если для DataGrid достаточно места, чтобы развернуться и полностью отобразить себя.Я перепробовал почти все, но не мог понять, что не так.

Я загрузил пример приложения, чтобы продемонстрировать проблему здесь .Надеясь, что кто-нибудь укажет на ошибку, которую я совершаю.

Ответы [ 2 ]

0 голосов
/ 26 мая 2011

Я сделал следующие изменения / обходные пути, чтобы решить проблему.Возможно, это не идеальное решение, но оно работает для меня.

Я добавил еще два столбца в 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 сейчас, пока не потребуется

0 голосов
/ 30 марта 2011

Вам необходимо удалить значение MinWidth, установленное для всех столбцов сетки данных, вы также можете установить столбцы сетки данных Width = "*", чтобы заполнить все пространство, доступное для них.посмотрите код ниже

Хорошо, я нашел его, пожалуйста, удалите HorizontalAlignment как из m_MainGrid, так и из m_DataGrid, более того, удалите все ColumnDefinitions в m_MainGrid.Я попробовал это на вашем решении, и это сработало.

Please follow the following steps

<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>

...