【问题标题】:How to fix width of Column in DataGrid when Horizontal Scrollbar is Visible?当水平滚动条可见时如何修复DataGrid中列的宽度?
【发布时间】:2023-04-09 16:56:01
【问题描述】:

我使用带有数据网格的复杂标头,例如this。但是我遇到了滚动条可见性的问题,它也花费了一个空间,因此宽度不能与网格完美匹配。我的 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

Anda 我有 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

结果还是这样:

如何解决像这样可见 scollbar 的列的匹配宽度?

更新

虽然我已经设置了宽度,但它仍然保持空间..

更新 2

我不知道滚动条已成功调整大小,但空间仍然存在

【问题讨论】:

    标签: c# wpf datagrid


    【解决方案1】:

    首先,您可以像这样隐藏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: 然后你可以设置ScrollViewer.VerticalScrollBarVisibility="Visible",设置固定的Width并在ColumnDefinition中取这个Width。
    • @mrhands:尝试为ScrollBar 设置样式,请查看我的编辑。
    • @mrhands:结果呢?有帮助吗?
    • 仍然没有运气.. 滚动条已成功调整大小,但最后一列和滚动条之间仍出现空间.. 我认为该行的宽度大于所有列的大小.. 红色空间我在图片中设置的边框..
    猜你喜欢
    • 2014-12-08
    • 2011-11-30
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    • 2014-01-25
    • 1970-01-01
    • 2013-07-06
    • 2011-02-10
    相关资源
    最近更新 更多