2011-02-05 100 views
0

我希望根據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> 

回答

1

如果我理解你的權利,你需要有兩個DataGrid s到具有完全相同的高度?嘗試將一個DataGridMinimumHeight設置爲另一個的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}" 
    ... 
3

您可以將兩個DataGridsGrid每一個行,請使用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> 
+0

謝謝你的幫助。就我而言,我只能有一個網格。看起來我無法實施這項技術。有任何想法嗎? – vladc77 2011-02-05 20:27:10

+0

我需要datagrid的高度,因爲我可能在datagrid頂部的那一行有其他元素。因此,我需要將數據網格擴展到行的底部,因爲如果其他列具有較高的數據網格,它將不會像另一個數據網格一樣高。這兩個datgrid都是一樣的高度。 – vladc77 2011-02-05 20:30:55

相關問題