【发布时间】:2019-12-29 07:42:00
【问题描述】:
我在网格的最后一行有一个 DataGrid。当 DataGrid 有很多行时,高度会超出我的 UserControl 的底部。我正在尝试将 DataGrid(或网格)的底部与我的 UserControl 的底部对齐,如果我调整窗口大小,它会保持对齐。 VerticalScrollBar 与 UserControl 的右侧完美对齐,但 HorizontalScrollBar 则不然。
我尝试将容器从 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 的高度,HorizontalScrollBar 似乎会正确地附加到底部:
【问题讨论】: