【问题标题】:WPF: How to set DataGrid height so it do not cross parent (Window/UserControl) areaWPF:如何设置 DataGrid 高度,使其不跨越父(窗口/用户控件)区域
【发布时间】:2018-01-27 13:56:04
【问题描述】:

在 WPF 项目 (VS2015) 中,我在 UserControl 中有一个 DataGrid。当 DataGrid 有足够的项目滚动时,DataGrid 的高度会超出 UserControl 的高度并离开屏幕。

我尝试将 DataGrid 放在 StackPanel、ScrollViewer、Grid、VerticalAlignment 到 Top/Stretch 但没有帮助。

当我使用下面的代码根据父高度设置高度时,DataGrid 的高度工作正常。但是这种方法的问题是我的 DataGrid 是在屏幕上的其他一些控件之后设置的,所以我不能按原样使用 UserControl 高度。我需要从 UserControl 高度减去 DataGrid 的起始位置。我不知道该怎么做?

Height="{Binding RelativeSource={RelativeSource AncestorType={x:Type UserControl}}, Path=ActualHeight}"

这是我的数据网格

<DataGrid Name="ItemsDataGrid" ItemsSource="{Binding ItemData}" 
    IsReadOnly="True" AutoGenerateColumns="False">
    <DataGrid.Columns>
        ...
    </DataGrid.Columns>
</DataGrid>

编辑#1

`

<UserControl x:Class="CC.ItemsListView"
    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:xctk="http://schemas.xceed.com/wpf/xaml/toolkit"
    xmlns:local="clr-namespace:CC"
    mc:Ignorable="d" 
    d:DesignHeight="730" d:DesignWidth="850"
    Style="{StaticResource FormsBaseStyle}">
    <StackPanel Background="LightGray">
        <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="3*"/>
                <ColumnDefinition Width="150"/>
                <ColumnDefinition Width="Auto"/>
                <ColumnDefinition Width="Auto"/>
                <ColumnDefinition Width="Auto"/>
            </Grid.ColumnDefinitions>
            <TextBlock Text="Items" Style="{StaticResource FormHeaderStyle}"/>
            <xctk:WatermarkTextBox Grid.Column="1" Name="ItemNameSearchTxt" TextChanged="ItemNameSearchTxt_TextChanged"/>
            <Button Grid.Column="2" Name="AddNewBtn" Content="Add New" Padding="20, 0" HorizontalAlignment="Right" Click="AddNewBtn_Click"/>
            <Button Grid.Column="3" Name="DeleteBtn" Content="Delete" Padding="20, 0" HorizontalAlignment="Right" Click="DeleteBtn_Click"/>
            <Button Grid.Column="4" Name="ExportBtn" Content="Export" Padding="20, 0" HorizontalAlignment="Right"/>
        </Grid>
        <Separator Height="1" Width="Auto" VerticalAlignment="Bottom"/>
        <DataGrid Name="ItemsDataGrid" ItemsSource="{Binding ItemDS}" IsReadOnly="True" AutoGenerateColumns="False">
            <DataGrid.Columns>
                ...
            </DataGrid.Columns>
        </DataGrid>
    </StackPanel>
</UserControl>

`

【问题讨论】:

  • 显示更多 xaml。发布更多布局代码。听起来像是布局问题。
  • 无复制。问题在于您的用户控件的布局(methinks)。添加那只小狗。
  • @AyyappanSubramanian 添加了完整的 xaml 代码

标签: c# .net wpf visual-studio wpfdatagrid


【解决方案1】:

试试这个布局。

  <Grid Background="LightGray">
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto"/>
        <RowDefinition Height="Auto"/>
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>
    <Grid Grid.Row="0">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="3*"/>
            <ColumnDefinition Width="150"/>
            <ColumnDefinition Width="Auto"/>
            <ColumnDefinition Width="Auto"/>
            <ColumnDefinition Width="Auto"/>
        </Grid.ColumnDefinitions>
        <TextBlock Text="Items" Style="{StaticResource FormHeaderStyle}"/>
        <xctk:WatermarkTextBox Grid.Column="1" Name="ItemNameSearchTxt" TextChanged="ItemNameSearchTxt_TextChanged"/>
        <Button Grid.Column="2" Name="AddNewBtn" Content="Add New" Padding="20, 0" HorizontalAlignment="Right" Click="AddNewBtn_Click"/>
        <Button Grid.Column="3" Name="DeleteBtn" Content="Delete" Padding="20, 0" HorizontalAlignment="Right" Click="DeleteBtn_Click"/>
        <Button Grid.Column="4" Name="ExportBtn" Content="Export" Padding="20, 0" HorizontalAlignment="Right"/>
    </Grid>
    <Separator Grid.Row="1" Height="1" Width="Auto" VerticalAlignment="Bottom"/>
    <DataGrid Grid.Row="2" Name="ItemsDataGrid" ItemsSource="{Binding ItemDS}" IsReadOnly="True" AutoGenerateColumns="False">
        <DataGrid.Columns>
            ...
        </DataGrid.Columns>
    </DataGrid>
</Grid>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-28
    • 2021-01-20
    • 1970-01-01
    • 2011-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-02
    相关资源
    最近更新 更多