如何自动调整 WPF 数据网格高度以填充标签页面

问题描述 投票:0回答:1

我需要让 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>
wpf datagrid tabs
1个回答
0
投票

您的代码片段不足以诊断原因。
我几乎 100% 确定问题不在于 DataGrid,而在于整体布局。如果您在运行时检查 UserControl

RamActivesControl
的高度值,您会注意到其 ActualHeight 属性的值是有限的,不等于整个可用空间。然后此限制适用于子 DataGrid。 StackPanel 很可能在布局中较高的位置使用。

© www.soinside.com 2019 - 2024. All rights reserved.