0

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.

H.B.
  • 166,899
  • 29
  • 327
  • 400
adontz
  • 1,428
  • 16
  • 36
  • Could you please give a sample code of what you're writing? Cheers – Rikki Sep 09 '12 at 04:30
  • @MohammadGoudarzi Updated and added an important note. – adontz Sep 09 '12 at 05:10
  • When you are coping the code into datatemplate, you mean the code the DataGrid inside the UserControl element or UserControl element itself? – Rikki Sep 09 '12 at 08:12
  • @MohammadGoudarzi I copy everything inside UserControl, staring with top-level Grid element. – adontz Sep 09 '12 at 08:16
  • Could you please give me a capture screen of its output? – Rikki Sep 09 '12 at 08:22
  • Here is it http://imageplay.net/img/tya22283375/Untitled_1.png – adontz Sep 09 '12 at 09:05
  • I did the same as you did and everything looks fine. Another question, what are you exactly doing in the TabControl.ContentTemplate? You wanna bind it to some source? if yes, why are you setting ContentControl.Resources by the way?! it does not make any sense. What do you wanna do in the second section? – Rikki Sep 09 '12 at 09:17

0 Answers0