ICollectionView実装にバインドされたItemsSourceを持つWPFDataGridがあります。DataGridがインスタンス化される前に、コレクションはアイテムでいっぱいです。
DataGrid内のすべての列はDataGridTemplateColumnタイプです。すべての列には、明示的に幅が指定されています。
列が多すぎてビューに収まらないため、水平方向のスクロールが必要です。
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の使用に関連しています。