DataGrid周围的WPF ScrollViewer会影响列宽

时间:2013-07-26 07:47:45

标签: wpf xaml wpfdatagrid scrollviewer

我有一个ScrollViewer的问题,我用它来滚动包含数据网格的用户控件。如果没有滚动查看器,列会根据需要填充数据网格,但在添加滚动查看器时,列会缩小到~15px。我能够简化我的布局,仍然可以重现这种行为。

当将数据网格宽度绑定到另一个控件时,列具有它们的法线,但这与数据网格上的固定宽度具有相同的效果。 我想我不是第一个遇到这个问题的人。如何解决此问题,让我的网格将其大小调整到可用空间并为其列提供一个比例宽度?

使用scrollviewer: enter image description here 没有: enter image description here

<Window x:Class="GridTest.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">
<ScrollViewer HorizontalScrollBarVisibility="Auto">
<Grid MinWidth="200">
    <DataGrid Margin="0" AutoGenerateColumns="False">
        <DataGrid.Columns>
            <DataGridCheckBoxColumn Header="Column A" Width="*"/>
            <DataGridCheckBoxColumn Header="Column B" Width="*"/>
        </DataGrid.Columns>
    </DataGrid>
</Grid>
</ScrollViewer>

2 个答案:

答案 0 :(得分:18)

是的,我前一段时间遇到过这个问题,我采取了一种解决方法,我会在这里发布它的有用信息

<ScrollViewer HorizontalScrollBarVisibility="Auto">
    <Grid x:Name="grid" MinWidth="200">
        <DataGrid Width="{Binding ElementName=grid, Path=ActualWidth}">
            <DataGrid.Columns>
                <DataGridCheckBoxColumn Header="Column A" Width="1*"/>
                <DataGridCheckBoxColumn Header="Column B" Width="1*"/>
            </DataGrid.Columns>
        </DataGrid>
    </Grid>
</ScrollViewer>

诀窍是给DataGrid一个宽度,在这种情况下我绑定回包含元素

或者,如果您不使用HorizontalScrollBar,则可以禁用它,这将允许ScrollViewer计算允许DataGrid计算宽度的宽度。

答案 1 :(得分:3)

上周我经历过同样的事情。

通常,如果您有以下元素,则会出现此问题:

  1. 未定义宽度的and Role.RoleName in('Oyuncu' ,'Senarist') 位于DataGrid内,ScrollViewer属性设置为HorizontalScrollBarVisibility
  2. 至少有一个Auto具有无限/未定义的宽度(例如:DataGridColumn

  3. 实际上,解决方案取决于您的需求:

    • 您希望Width="*"在显示窗口时占用DataGridColumns的所有可用空间(即使没有显示数据):在这种情况下, sa_ddam213 的答案可以帮助您应对。
    • 或者您不介意在最后一列和Window首次展示的DataGrid右边框之间留一些空格。

    对于最后一个选项,您只需要为DataGrid设置固定宽度(或者如果您不想,则不要定义它,这不是很重要,因为列可以用户可以通过双击轻松调整大小。在这种情况下,您可以在没有宽度的情况下定义DataGridColumns


    这是一个例子:

    DataGrid


    通过这种方式,如果列自动调整大小后列内容在容器上运行,则会出现水平滚动条。