【问题标题】:Lock WPF Datagrid HorizontalScrollBar to bottom of window将 WPF Datagrid Horizo​​ntalScrollBar 锁定到窗口底部
【发布时间】:2019-12-29 07:42:00
【问题描述】:

我在网格的最后一行有一个 DataGrid。当 DataGrid 有很多行时,高度会超出我的 UserControl 的底部。我正在尝试将 DataGrid(或网格)的底部与我的 UserControl 的底部对齐,如果我调整窗口大小,它会保持对齐。 VerticalScrollBar 与 UserControl 的右侧完美对齐,但 Horizo​​ntalScrollBar 则不然。

我尝试将容器从 Grid 替换为 DockPanel 和 StackPanel,但没有成功。目前我已经尝试了几十种不同的配置,但都没有奏效。

<reactiveui:ReactiveUserControl 
    x:Class="MyNamespace.Views.MyView"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:local="clr-namespace:MyNamespace.Views"
    xmlns:reactiveui="http://reactiveui.net"
    xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
    xmlns:viewmodels="clr-namespace:MyNamespace.ViewModels"
    xmlns:models="clr-namespace:MyNamespace.Models"
    mc:Ignorable="d" 
    x:TypeArguments="viewmodels:MyViewModel"
    d:DesignHeight="450" d:DesignWidth="800">

    <Grid Margin="16 16 0 0">
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="Auto"/>
            <RowDefinition/>
        </Grid.RowDefinitions>
        <DataGrid Name="ExcelData" 
                  EnableColumnVirtualization="True" 
                  EnableRowVirtualization="True" 
                  Grid.Row="2" 
                  AutoGeneratedColumns="ExcelData_AutoGeneratedColumns">
            <DataGrid.CellStyle>
                <Style TargetType="DataGridCell" BasedOn="{StaticResource MaterialDesignDataGridCell}">
                    <Setter Property="Padding" Value="16"/>
                </Style>
            </DataGrid.CellStyle>
            <DataGrid.ColumnHeaderStyle>
                <Style TargetType="DataGridColumnHeader" BasedOn="{StaticResource MaterialDesignDataGridColumnHeader}">
                    <Setter Property="HorizontalContentAlignment" Value="Center"/>
                </Style>
            </DataGrid.ColumnHeaderStyle>
        </DataGrid>
    </Grid>
</reactiveui:ReactiveUserControl>

代码隐藏:

public partial class MyView : ReactiveUserControl<MyViewModel>
{
    public MyView()
    {
        InitializeComponent();
        ViewModel = new MyViewModel();

        this.WhenActivated(disposableRegistration =>
        {
            // populate data grid
            this.OneWayBind(ViewModel,
                viewModel => viewModel.DataActive,
                view => view.ExcelData.ItemsSource)
                .DisposeWith(disposableRegistration);
        });
    }

    private void ExcelData_AutoGeneratedColumns(object sender, EventArgs e)
    {
        foreach (var column in ExcelData.Columns)
        {
            // set auto generated column headers to empty string
            if (column.Header.ToString().Contains("Column"))
            {
                column.Header = string.Empty;
            }
        }
    }
}

除非我使用 Height="" 将高度锁定为特定值,否则 DataGrid 高度会增长到我拥有的行数。

这是它在底部的样子:

一旦将窗口高度调整为大于 DataGrid 的高度,Horizo​​ntalScrollBar 似乎会正确地附加到底部:

【问题讨论】:

    标签: c# wpf xaml datagrid


    【解决方案1】:

    试试这个:

    <Grid Margin="16 16 0 0">
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="Auto"/>
            <RowDefinition />
        </Grid.RowDefinitions>
    
        <DataGrid Name="ExcelData" 
                  EnableColumnVirtualization="True" 
                  EnableRowVirtualization="True"
                  Grid.Row="2" 
                  AutoGeneratedColumns="ExcelData_AutoGeneratedColumns">
            <DataGrid.CellStyle>
                <Style TargetType="DataGridCell" BasedOn="{StaticResource MaterialDesignDataGridCell}">
                    <Setter Property="Padding" Value="16"/>
                </Style>
            </DataGrid.CellStyle>
            <DataGrid.ColumnHeaderStyle>
                <Style TargetType="DataGridColumnHeader" BasedOn="{StaticResource MaterialDesignDataGridColumnHeader}">
                    <Setter Property="HorizontalContentAlignment" Value="Center"/>
                </Style>
            </DataGrid.ColumnHeaderStyle>
        </DataGrid>
    </Grid>
    

    我从DataGrid 中删除了ScrollViewerFrozenColumnCount 属性。

    输出:

    【讨论】:

    • 谢谢,但不幸的是它没有用。我已经用更多代码更新了我的帖子,特别是包括我正在使用来自 ReactiveUI 的 ReactiveUserControl。我还将 XML 更新为我目前正在尝试但不起作用的内容。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-09
    • 1970-01-01
    • 2019-01-26
    • 2010-12-19
    • 1970-01-01
    • 2016-11-05
    相关资源
    最近更新 更多