【发布时间】:2021-12-08 04:49:56
【问题描述】:
我对调整列大小的默认行为有疑问:
如果 DataGrid 对其容器来说太宽,则会出现水平滚动条。 如果我将栏向右拖动并调整最右侧列的大小,则滚动条会粘在右侧。
就我而言,我不希望这种行为。 滚动条不应该粘在右边, 或者,完美的是,像 MS Excel 这样的调整大小预览。
谁能告诉我如何做到这一点?
/编辑1
我将 .Net 4.8 用于一个简单的 WPF 应用程序。
如果需要示例,以下将显示两个网格,左侧的一个可用于该行为:
<Window x:Class="DataGridTest.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:DataGridTest"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="525">
<Window.DataContext>
<local:MasterViewModel/>
</Window.DataContext>
<DockPanel>
<Button DockPanel.Dock="Bottom" Command="{Binding DisplaySelectionCountCommand}">Display Selection Count</Button>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<DataGrid Grid.Column="0" ItemsSource="{Binding Items}" AutoGenerateColumns="False"
SelectionMode="Extended" local:MultiSelect.IsEnabled="True" HorizontalScrollBarVisibility="Auto">
<DataGrid.Columns>
<DataGridTextColumn Header="Name" Binding="{Binding Name}" Width="100"/>
<DataGridTextColumn Header="Name" Binding="{Binding Name}" Width="100"/>
<DataGridTextColumn Header="Name" Binding="{Binding Name}" Width="100"/>
</DataGrid.Columns>
</DataGrid>
<DataGrid Grid.Column="1" ItemsSource="{Binding Items}"
SelectionMode="Extended" local:MultiSelect.IsEnabled="True"/>
</Grid>
</DockPanel>
</Window>
【问题讨论】:
-
如果你知道你有很多列,你应该明确启用水平滚动条来提高渲染性能。你想要的行为不清楚。如果您想在视图中保留调整大小列的左侧列,您可以轻松地监听 DataGrid 的 SizeChanged 事件。然后在事件处理程序中获取上一列并将其滚动到视图中。
-
也许这样更清楚:滚动条的行为在到达右端后发生变化,我开始调整大小。滚动条然后粘在右边。因此,如果我调整最后一列的大小,我很容易因此而失去其他列的视图。也许我应该添加图片来说明我的意思。无论如何,我不希望这种行为改变。
-
@BionicCode 我试图监听该事件,但它只在打开窗口时触发一次,而不是在开始时或调整列大小期间或之后。
标签: c# .net wpf datagrid horizontal-scrolling