我有 WPF DataGrid 和 ItemsSource 绑定到 ICollectionView 实现。在 DataGrid 实例化之前,集合中已经充满了项目。
DataGrid 中的所有列都是 DataGridTemplateColumn 类型。所有列都明确指定了宽度。
视图中的列太多,因此需要水平滚动。
当 DataGrid.HorizontalScrollBarVisibility 属性为自动水平滚动条时,直到我垂直滚动项目时才可见。
当 DataGrid.HorizontalScrollBarVisibility 属性为 Visible 水平滚动条时,直到我垂直滚动项目才启用。
更改其他属性(Width、MaxWidth、MinWidth、EnableColumnVirtualization、ScrollViewer.CanContentScroll、SelectionMode、SelectionUnit)没有效果。
将 DataGrid 放入 ScrollViewer 不是一种选择,因为在这种情况下,垂直滚动条会随着内容水平滚动。
那么,是什么导致了这种行为呢?可以做什么?
更新
用户控件的 XAML
<UserControl
x:Class="Belrost.Windows.EventListEditor2"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="4" />
<RowDefinition Height="23" />
<RowDefinition Height="4" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="8" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="75" />
<ColumnDefinition Width="4" />
<ColumnDefinition Width="75" />
<ColumnDefinition Width="4" />
<ColumnDefinition Width="75" />
<ColumnDefinition Width="8" />
</Grid.ColumnDefinitions>
<DataGrid
Grid.Row="0" Grid.RowSpan="1"
Grid.Column="0" Grid.ColumnSpan="8"
ItemsSource="{Binding}"
IsSynchronizedWithCurrentItem="True"
AutoGenerateColumns="False"
SelectionMode="Extended"
SelectionUnit="FullRow">
<DataGrid.Columns>
<DataGridTemplateColumn Header="Timestamp" Width="120">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Timestamp}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="Machine" Width="120">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Machine}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="Principal" Width="120">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Principal}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="MemberName" Width="120">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding MemberName}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="MemberFile" Width="120">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding MemberFile}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="MemberLine" Width="120">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding MemberLine}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="MemberTime" Width="120">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding MemberTime}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
</Grid>
</UserControl>
用户控件通过以下方式放置在 TabControl 上
<TabControl.ContentTemplate>
<DataTemplate>
<ContentControl Content="{Binding}">
<ContentControl.Resources>
<DataTemplate DataType="{x:Type w:EventListView}">
<w:EventListEditor2 />
</DataTemplate>
</ContentControl.Resources>
</ContentControl>
</DataTemplate>
</TabControl.ContentTemplate>
笔记
如果我将用户控件的代码复制粘贴到 DataTemplate 中,一切正常。所以问题与UserControl的使用有关。