如何根据另一个的高度扩展DataGrid的高度?

时间:2011-02-05 20:03:38

标签: wpf xaml data-binding 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 XPath=@Name}" 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 XPath=@Name}" Foreground="#FF6E6E6E" Width="160" />   
            </DataGrid.Columns>
        </DataGrid>
    </Border>
</Grid>

2 个答案:

答案 0 :(得分:3)

您可以将DataGrids放入Grid,每行{1}},使用SharedSizeGroup让它们同步。为两个网格的父级设置Grid.IsSharedSizeScope

e.g。像这样的东西

<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>

答案 1 :(得分:1)

如果我理解你的话,你需要让两个DataGrid s具有完全相同的高度?尝试将MinimumHeight的{​​{1}}设置为另一个的DataGrid,反之亦然。这可以解决问题:

ActualHeight