我有WPF DataGrid,ItemsSource绑定到ICollectionView实现。在DataGrid被实例化之前,集合中已经有很多项。
DataGrid中的所有列都是DataGridTemplateColumn类型。所有列都明确指定了Width。
视图中有太多列,因此需要水平滚动。
当DataGrid.HorizontalScrollBarVisibility属性为Auto时,水平滚动条在我垂直滚动项目之前不可见。
当DataGrid.HorizontalScrollBarVisibility属性为Visible时,在我垂直滚动项目之前,不会启用水平滚动条。
更改其他属性(Width,MaxWidth,MinWidth,EnableColumnVirtualization,ScrollViewer.CanContentScroll,SelectionMode,SelectionUnit)无效。
将DataGrid放入ScrollViewer不是一个选项,因为在这种情况下,垂直滚动条会与内容水平滚动。
那么,是什么导致了这种行为呢?可以做些什么?
更新
UserControl的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的使用有关。