我需要让 DataGrid 高度自动扩展以满足其所在选项卡页的高度。目前,DataGrid 的高度仅扩展以满足其包含数据的所有行的高度。
这是当前外观的示例: 我需要 DataGrid 扩展到示例中较低的水平标记:
这是我的 XAML:
<UserControl x:Class="Nexidia.Esi.ManagementConsole.Views.RamActivesControl"
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:converters="clr-namespace:Nexidia.Esi.ManagementConsole.Views.Converters"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800">
<Grid Background="#FFF1F1F1">
<Grid.RowDefinitions>
<RowDefinition Height="30" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<StackPanel x:Name="RamControlsPanel" Grid.Row="0" Orientation="Horizontal" Margin="4 4 0 4">
<Button Content="Refresh" Width="60" Margin="0 0 4 0" Click="ButtonRefresh_OnClick" />
<Button Content="New..." Width="60" Margin="0 0 4 0" Click="ButtonNew_OnClick" />
</StackPanel>
<DataGrid x:Name="RamActivesDataGrid"
ItemsSource="{Binding RamActives}"
Grid.Row="1"
AutoGenerateColumns="False"
SelectionMode="Single"
CanUserAddRows="False"
CanUserDeleteRows="False"
CanUserResizeRows="False"
RowHeaderWidth="0"
SelectionUnit="FullRow">
<DataGrid.Resources>
<converters:ListToStringConverter x:Key="ListToString" />
</DataGrid.Resources>
<DataGrid.Columns>
<DataGridTextColumn Header="Created" Width="135" Binding="{Binding CreatedTimeUtc}" />
<DataGridTextColumn Header="Modified" Width="135" Binding="{Binding ModifiedTimeUtc}" />
<DataGridTextColumn Header="Originator" Width="135" Binding="{Binding Originator}" />
<DataGridTextColumn Header="Profiles with access" Width="*" Binding="{Binding Path=RestrictedAccessInstanceProfiles, Converter={StaticResource ListToString}}" />
<DataGridTemplateColumn Header="Actions" Width="90" IsReadOnly="True">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<Image Width="15" Cursor="Hand" MouseDown="ImageEdit_OnMouseDown" ToolTip="Edit Instance">
<Image.Source>
<BitmapImage UriSource="../Icons/edit.png" />
</Image.Source>
</Image>
<Image Margin="10 0 0 0" Width="15" Cursor="Hand" MouseDown="ImageStop_OnMouseDown" ToolTip="Stop Instance">
<Image.Source>
<BitmapImage UriSource="../Icons/remove.png" />
</Image.Source>
</Image>
</StackPanel>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn Header="Instance Id" Width="115" Binding="{Binding InstanceId}" />
<DataGridTextColumn Header="Parent Instance Id" Width="115" Binding="{Binding ParentInstanceId}" />
<DataGridTextColumn Header="Original Instance Id" Width="115" Binding="{Binding OriginalInstanceId}" />
</DataGrid.Columns>
</DataGrid>
</Grid>
</UserControl>
您的代码片段不足以诊断原因。
我几乎 100% 确定问题不在于 DataGrid,而在于整体布局。如果您在运行时检查 UserControl
RamActivesControl
的高度值,您会注意到其 ActualHeight 属性的值是有限的,不等于整个可用空间。然后此限制适用于子 DataGrid。 StackPanel 很可能在布局中较高的位置使用。