0

我有 WPF DataGrid 和 ItemsSource 绑定到 ICollectionView 实现。在 DataGrid 实例化之前,集合中已经充满了项目。

DataGrid 中的所有列都是 DataGridTemplateColumn 类型。所有列都明确指定了宽度。

视图中的列太多,因此需要水平滚动。

当 DataGrid.Horizo​​ntalScrollBarVisibility 属性为自动水平滚动条时,直到我垂直滚动项目时才可见。

当 DataGrid.Horizo​​ntalScrollBarVisibility 属性为 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的使用有关。

4

0 回答 0