【问题标题】:WPF Datagrid horizontal scrolling with only header dataWPF Datagrid 水平滚动仅包含标题数据
【发布时间】:2012-11-30 18:03:11
【问题描述】:

我有一个WPFDatagrid,在初始阶段我将分配 100 个列标题给Datagrid,但我无法水平滚动它来查看所有列标题。

DataGrid 没有任何行,ItemSource 为空。当我只有列标题(没有行)时,如何实现水平滚动。

我将ItemSource 绑定到一个只有列标题而没有行的DataTable。

如何在这种情况下滚动。

【问题讨论】:

    标签: c# wpf datagrid


    【解决方案1】:

    以下是对我有用的此问题的解决方法:只需将DataGrid 放入ScrollViewer 并创建DataTrigger 以将ScrollViewerHorizontalScrollBarVisibility 设置为Visible 如果@987654327 @ 没有项目。

    <ScrollViewer VerticalScrollBarVisibility="Disabled">
        <ScrollViewer.Style>
            <Style TargetType="ScrollViewer">
                <Style.Triggers>
                    <DataTrigger Binding="{Binding ElementName=dataGrid, Path=HasItems}" Value="False">
                        <Setter Property="HorizontalScrollBarVisibility" Value="Visible"/>
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </ScrollViewer.Style>
        <DataGrid Name="dataGrid"/>
    </ScrollViewer>
    

    【讨论】:

    • 像魅力一样工作!这是在 C# 中: var outerScroller = new ScrollViewer { Content = dataGrid, VerticalScrollBarVisibility = ScrollBarVisibility.Disabled, }; outerScroller.Style = new Style(typeof(ScrollViewer), outerScroller.Style) { Triggers = { new DataTrigger { Binding = new Binding("HasItems") { Source = dataGrid, }, Value = false, Setters = { new Setter(ScrollViewer .Horizo​​ntalScrollBarVisibilityProperty, ScrollBarVisibility.Visible), }, }, }, };
    【解决方案2】:

    不幸的是,DataGrid 默认样式是不可能的,您必须覆盖模板并创建从主网格派生的自定义网格。 here你可以找到更多细节。

    【讨论】:

      【解决方案3】:

      正如 ArsenMkrt 所说,这是不可能的。但是,我认为您可以在DataTable 中添加一行,但之后,您可以将其对应的DatagridRow 的可见性设置为隐藏。

      当您的DataTable 被实际数据填充时,只需清除 DataTable.Rows。

      【讨论】:

        【解决方案4】:

        你没有。你必须有一排。

        将您的 ItemsSource 更改为不默认为 null。

        如果您允许添加行,则可以默认为空列表。

        如果不允许添加行,则需要默认为一个项目的列表。

        List<object> olist = new List<object>();
        olist.add(new object());
        

        【讨论】:

        • 我将 ItemSource 更改为只有列标题,没有行的 DataTable。即使那样我也无法滚动。
        • 你似乎没有阅读我的整个帖子。第一行很清楚,你必须有一行。我为此提供了两个选项: 1. 允许添加表示 IsReadonly="False" 的行,这实际上添加了一个空行或 2. 您必须绑定到一个包含一个项目的列表。但是 max 建议的解决方法效果很好。您是否正在寻找更好的解决方案?
        猜你喜欢
        • 1970-01-01
        • 2012-06-27
        • 2023-03-22
        • 2016-04-12
        • 1970-01-01
        • 1970-01-01
        • 2011-05-07
        • 2014-12-08
        • 1970-01-01
        相关资源
        最近更新 更多