WPF:如何设置 DataGrid 高度使其不跨越父 (Window/UserControl) 区域
WPF: How to set DataGrid height so it do not cross parent (Window/UserControl) area
在 WPF 项目 (VS2015) 中,我在 UserControl 中有一个 DataGrid。当 DataGrid 有足够的项目要滚动时,DataGrid 的高度会超出 UserControl 的高度并超出屏幕范围。
我尝试将 StackPanel、ScrollViewer、Grid、VerticalAlignment 中的 DataGrid 放入 Top/Stretch 但没有帮助。
当我使用以下代码根据父级高度设置高度时,DataGrid 的高度有些正确。但是这种方法的问题是我的 DataGrid 是在屏幕上的其他一些控件之后设置的,所以我不能按原样使用 UserControl 高度。我需要从 UserControl 高度中减去 DataGrid 的起始位置。我不知道该怎么做?
Height="{Binding RelativeSource={RelativeSource AncestorType={x:Type UserControl}}, Path=ActualHeight}"
这是我的 DataGrid
<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>
`
试试这个布局。
<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>
在 WPF 项目 (VS2015) 中,我在 UserControl 中有一个 DataGrid。当 DataGrid 有足够的项目要滚动时,DataGrid 的高度会超出 UserControl 的高度并超出屏幕范围。
我尝试将 StackPanel、ScrollViewer、Grid、VerticalAlignment 中的 DataGrid 放入 Top/Stretch 但没有帮助。
当我使用以下代码根据父级高度设置高度时,DataGrid 的高度有些正确。但是这种方法的问题是我的 DataGrid 是在屏幕上的其他一些控件之后设置的,所以我不能按原样使用 UserControl 高度。我需要从 UserControl 高度中减去 DataGrid 的起始位置。我不知道该怎么做?
Height="{Binding RelativeSource={RelativeSource AncestorType={x:Type UserControl}}, Path=ActualHeight}"
这是我的 DataGrid
<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>
`
试试这个布局。
<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>