I have WPF DataGrid with ItemsSource bound to ICollectionView implementation. Collection is full of items before DataGrid is even instantiated.
All columns within DataGrid are of DataGridTemplateColumn type. All columns have explicitly specified Width.
There are too much columns to fit into the view, so horizontal scrolling is required.
When DataGrid.HorizontalScrollBarVisibility property is Auto horizontal scroll bar is not visible until I scroll items vertically.
When DataGrid.HorizontalScrollBarVisibility property is Visible horizontal scroll bar is not enabled until I scroll items vertically.
Changing other properties (Width, MaxWidth, MinWidth, EnableColumnVirtualization, ScrollViewer.CanContentScroll, SelectionMode, SelectionUnit) had no effect.
Putting DataGrid into ScrollViewer is not an option, since vertical scrollbar scrolls horizontally with content in that case.
So, what causes this behavior? What can be done?
UPDATE
XAML of UserControl
<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>
User control is placed on TabControl the following way
<TabControl.ContentTemplate>
<DataTemplate>
<ContentControl Content="{Binding}">
<ContentControl.Resources>
<DataTemplate DataType="{x:Type w:EventListView}">
<w:EventListEditor2 />
</DataTemplate>
</ContentControl.Resources>
</ContentControl>
</DataTemplate>
</TabControl.ContentTemplate>
NOTE
If I copy-paste code of user control into the DataTemplate, everything works just fine. So the problem is related to usage of UserControl.