18

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

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

使用滚动查看器: 在此处输入图像描述 和不使用: 在此处输入图像描述

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

4

2 回答 2

22

是的,我前段时间遇到过这个问题,我采取了一种解决方法,我会在这里发布以防万一

<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 计算宽度。

于 2013-07-26T08:38:41.563 回答
5

上周我也经历了同样的事情。

通常,当您具有以下元素时会出现此问题:

  1. 具有未定义宽度的 ADataGrid放置在 a 内ScrollViewer,其HorizontalScrollBarVisibility属性设置为Auto
  2. 至少一个DataGridColumn具有无限/未定义的宽度(例如Width="*":)


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

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

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


这是一个例子:

<ScrollViewer HorizontalScrollBarVisibility="Auto">
    <Grid x:Name="grid" MinWidth="200">
        <DataGrid>
            <DataGrid.Columns>
                <DataGridCheckBoxColumn Header="Column A" Width="100"/>
                <DataGridCheckBoxColumn Header="Column B" />
            </DataGrid.Columns>
        </DataGrid>
    </Grid>
</ScrollViewer>


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

于 2015-07-02T08:46:32.120 回答