如何根据另一个高度来扩展DataGrid的高度?
问题描述:
我希望根据DataGrid
拥有两个DataGrid
的平等高度,这两个数据具有更多数据,并因此而变得更高。换句话说,无论数据输入如何,我都希望有两个DataGrid
高度相同。我有一行和几列,其中一个DataGrid
需要一列,另一个DataGrid
需要另一列。如果DataGrid
之一得到更多输入,则它会延长。我想要另一个DataGrid
与下面的空白空间一样高。我想知道如何让它工作。任何DataGrid
都应根据高度较高的DataGrid
自动展开。任何想法都非常感谢!如何根据另一个高度来扩展DataGrid的高度?
下面是样品XAML:
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="DataGridExpand.MainWindow"
x:Name="Window"
Title="MainWindow"
Width="640" Height="480">
<Window.Resources>
<XmlDataProvider x:Key="Info" XPath="Info/Values">
<x:XData>
<Info xmlns="">
<Values Name="Value1" />
<Values Name="Value2" />
<Values Name="Value3" />
<Values Name="Value4" />
<Values Name="Value5" />
<Values Name="Value6" />
<Values Name="Value7" />
<Values Name="Value8" />
<Values Name="Value9" />
</Info>
</x:XData>
</XmlDataProvider>
<XmlDataProvider x:Key="Info2" XPath="Info2/Values2">
<x:XData>
<Info2 xmlns="">
<Values2 Name="Value1" />
<Values2 Name="Value2" />
<Values2 Name="Value3" />
<Values2 Name="Value4" />
<Values2 Name="Value5" />
</Info2>
</x:XData>
</XmlDataProvider>
</Window.Resources>
<Grid x:Name="LayoutRoot" Margin="10" >
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="49*" />
<ColumnDefinition Width="20" />
<ColumnDefinition Width="49*" />
</Grid.ColumnDefinitions>
<Border Padding="10" BorderBrush="Black" Background="#FFD2D2D2">
<DataGrid x:Name="Main" GridLinesVisibility="Horizontal" AutoGenerateColumns="False"
ItemsSource="{Binding XPath=/Info2/Values2}"
DataContext="{Binding Source={StaticResource Info2}}" Margin="10">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding [email protected]}" Foreground="#FF6E6E6E" Width="160" />
</DataGrid.Columns>
</DataGrid>
</Border>
<GridSplitter x:Name="GridSplitter" ResizeBehavior="PreviousAndNext" HorizontalAlignment="Stretch" Grid.Column="1" />
<Border Grid.Column="2" Padding="10" BorderBrush="Black" Background="#FFD2D2D2">
<DataGrid x:Name="Main1" GridLinesVisibility="Horizontal" AutoGenerateColumns="False" Margin="10"
ItemsSource="{Binding XPath=/Info/Values}"
DataContext="{Binding Source={StaticResource Info}}">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding [email protected]}" Foreground="#FF6E6E6E" Width="160" />
</DataGrid.Columns>
</DataGrid>
</Border>
</Grid>
答
如果我理解你的权利,你需要有两个DataGrid
s到具有完全相同的高度?尝试将一个DataGrid
的MinimumHeight
设置为另一个的ActualHeight
,反之亦然。这可能会诀窍:
<DataGrid x:Name="Main"
MinHeight="{Binding ElementName=Main1,Path=ActualHeight}"
...
<DataGrid x:Name="Main1" GridLinesVisibility="Horizontal" AutoGenerateColumns="False"
MinHeight="{Binding ElementName=Main,Path=ActualHeight}"
...
答
您可以将两个DataGrids
成Grid
每一个行,请使用SharedSizeGroup
让他们同步。为两个网格的父级设置Grid.IsSharedSizeScope
。
例如像这样
<Grid x:Name="LayoutRoot" Margin="10" Grid.IsSharedSizeScope="True">
...
<Grid>
<Grid.RowDefinitions>
<RowDefinition SharedSizeGroup="A"/>
</Grid.RowDefinitions>
...
<DataGrid .../> <!-- DataGrid 1 -->
</Grid>
<Grid>
<Grid.RowDefinitions>
<RowDefinition SharedSizeGroup="A"/>
</Grid.RowDefinitions>
...
<DataGrid .../> <!-- DataGrid 2 -->
</Grid>
...
</Grid>
谢谢你的帮助。就我而言,我只能有一个网格。看起来我无法实施这项技术。有任何想法吗? – vladc77 2011-02-05 20:27:10
我需要datagrid的高度,因为我可能在datagrid顶部的那一行有其他元素。因此,我需要将数据网格扩展到行的底部,因为如果其他列具有较高的数据网格,它将不会像另一个数据网格一样高。这两个datgrid都是一样的高度。 – vladc77 2011-02-05 20:30:55