当水平滚动条可见时如何固定DataGrid列的宽度?

3

我正在使用类似于这样的带有datagrid的复杂标题。 但是,我遇到了滚动条可见性的问题,它也占用了空间,因此宽度无法完全匹配网格。 我的Grid就像在<Column.Definition>中定义的那样。

  <ColumnDefinition Width="{Binding ElementName=Column1, Path=ActualWidth}"/>
  <ColumnDefinition Width="{Binding ElementName=Column2, Path=ActualWidth}"/>
  <ColumnDefinition Width="{Binding ElementName=Column3, Path=ActualWidth}"/>
  <ColumnDefinition Width="{Binding ElementName=Column4, Path=ActualWidth}"/>
  <ColumnDefinition Width="{Binding ElementName=Column5, Path=ActualWidth}"/>
  <ColumnDefinition Width="{Binding ElementName=Column6, Path=ActualWidth}"/>
  <ColumnDefinition Width="{Binding ElementName=Column7, Path=ActualWidth}"/>
... till column 29

我有一个数据网格,其中的Column.Definition如下所示:

 <DataGrid.Columns>
<mui:DataGridTextColumn x:Name="Column1"  Width="50" Header="Segmen"  Binding="{Binding B4R1,UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"/>
<mui:DataGridTextColumn x:Name="Column2" Width="50" Header="Fisik" Binding="{Binding B4R2,UpdateSourceTrigger=PropertyChanged , Mode=TwoWay}" />
<mui:DataGridTextColumn x:Name="Column3" Width="50" Header="Sensus" Binding="{Binding B4R3,UpdateSourceTrigger=PropertyChanged , Mode=TwoWay}"/>
<mui:DataGridTextColumn x:Name="Column4" Width="50" Header="Tempat Tinggal" Binding="{Binding B4R4,UpdateSourceTrigger=PropertyChanged , Mode=TwoWay}" />
<mui:DataGridTextColumn x:Name="Column5" Width="50" Header="Campuran" Binding="{Binding B4R5,UpdateSourceTrigger=PropertyChanged , Mode=TwoWay}" />
.... till column29

结果仍然是这样的:
如何解决带有滚动条的列匹配宽度的问题?
更新:
即使我已经设置了宽度,它仍然保留空间。
更新2:
我不知道滚动条是否成功调整大小,但空间仍然存在。
1个回答

0
首先,您可以像这样隐藏 ScrollBar 的可见性:
<DataGrid Name="dataGrid"
          ScrollViewer.VerticalScrollBarVisibility="Hidden" ... />

其次,您可以为ScrollBar设置固定的Width:
<Window x:Class="MyClass.MainWindow"
        xmlns:sys="clr-namespace:System;assembly=mscorlib"

<DataGrid Name="dataGrid">
    <DataGrid.Resources>
        <sys:Double x:Key="{x:Static SystemParameters.VerticalScrollBarWidthKey}">20</sys:Double>
        <sys:Double x:Key="{x:Static SystemParameters.HorizontalScrollBarHeightKey}">20</sys:Double>
    </DataGrid.Resources>
...
</DataGrid>

第三,您可以为ScrollBar设置样式:
<DataGrid.Resources>
    <Style TargetType="{x:Type ScrollBar}">
        <Style.Triggers>                       
            <Trigger Property="Orientation" Value="Vertical">
                <Setter Property="Width" Value="10" />
                <Setter Property="MinWidth" Value="10" />
            </Trigger>
        </Style.Triggers>
    </Style>
</DataGrid.Resources>

它仍然不起作用...尽管我已经设置了宽度,但它仍然保留那个空格...您可以在图像中查看我的更新帖子。 - mrhands
@mrhands:然后您可以设置 ScrollViewer.VerticalScrollBarVisibility="Visible",设置固定宽度并在 ColumnDefinition 中使用此宽度。 - Anatoliy Nikolaev
@mrhands:尝试为“ScrollBar”设置样式,请查看我的编辑。 - Anatoliy Nikolaev
@mrhands:那结果呢?它有帮助吗? - Anatoliy Nikolaev
仍然没有成功...滚动条已经成功调整大小,但是最后一列和滚动条之间仍然存在空间...我认为行比所有列的大小都要宽...红色边框中的空间就是我在图片中设置的。 - mrhands
我仍然不知道这段代码的含义是什么... <ColumnDefinition Width="{Binding ElementName=SampleDataGrid, Path=RowHeaderWidth}" - mrhands

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接