2016-02-19 58 views
0

我有一個網格,其中包含一個ItemsControl與另一個網格。我想對齊兩個網格中的兩個分離器。我已經實現了Grid.SharedSizeScope,但是這個選項只共享了網格所在的列。你有什麼建議嗎?共享網格拆分器

這是我的xaml代碼。

<Grid> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="Auto" SharedSizeGroup="Col1"/> 
     <ColumnDefinition Width="5"  SharedSizeGroup="Col2"/> 
     <ColumnDefinition Width="*"/> 
    </Grid.ColumnDefinitions> 

    <Grid.RowDefinitions> 
     <RowDefinition Height="{StaticResource GridRowHeight}"/> 
     <RowDefinition Height="{StaticResource GridRowHeight}"/> 
     <RowDefinition Height="Auto"/> 
     <RowDefinition Height="Auto"/> 
     <RowDefinition Height="Auto"/> 
    </Grid.RowDefinitions> 

    <GridSplitter Grid.Column="1" Grid.RowSpan="2" HorizontalAlignment="Left" Width="5" VerticalContentAlignment="Stretch" IsTabStop="False"/> 

    <TextBlock Name="ID" Grid.Row="0" Grid.Column="0" Text="ID"/> 
    <TextBox Name="TxtID" Grid.Row="0" Grid.Column="2" TabIndex="0" Text={Binding ID}/> 

     <TextBlock Name="Description" Grid.Row="1" Grid.Column="0" Text="Description"/> 
     <TextBox x:Name="TxtDescription" Grid.Row="1" Grid.Column="2" Grid.RowSpan="1" Text="{Binding Description, UpdateSourceTrigger=LostFocus}"/> 

     <ItemsControl ItemsSource="{Binding MyList}" Grid.IsSharedSizeScope="True" IsTabStop="False" 
       Grid.Row="3" Grid.Column="0" Grid.ColumnSpan="3"> 
      <ItemsControl.ItemTemplate> 
       <DataTemplate> 
        <Grid> 
         <Grid.ColumnDefinitions> 
          <ColumnDefinition Width="Auto" SharedSizeGroup="Col1"/> 
          <ColumnDefinition Width="5" SharedSizeGroup="Col2"/> 
          <ColumnDefinition Width="*"/> 
         </Grid.ColumnDefinitions> 

         <Grid.RowDefinitions> 
          <RowDefinition Height="Auto"/> 
          <RowDefinition Height="Auto"/> 
          <RowDefinition Height="Auto"/> 
         </Grid.RowDefinitions> 

         <GridSplitter Grid.Column="1" Grid.RowSpan="2147483647" Width="5" HorizontalAlignment="Left" VerticalContentAlignment="Stretch" IsTabStop="False"/> 

         <TextBlock Name="Type" Grid.Column="0" Grid.Row="0" Text="{Binding Type}"/> 
         <ComboBox Grid.Row="0" Grid.Column="2" ItemsSource="{Binding Source={StaticResource Types}}" SelectedItem="{Binding MyType}"/> 
        </Grid> 
       </DataTemplate> 
      </ItemsControl.ItemTemplate> 
     </ItemsControl> 
</Grid> 
+0

你試圖在根網格設置Grid.IsSharedSizeScope = 「真」? – Ivan

+0

是的..但它仍然不起作用。 –

+0

爲什麼不把ItemsControl移動到'Grid.Column =「1」',移除第二個分離器並只使用第一個?你只需要爲它製作一個更大的RowSpan,就是這樣。 – icebat

回答

2

好的,如果你真的會拿出itemscontrol並將其移動到網格外,然後把所有東西都放到dockable中,怎麼辦?

<DockPanel Grid.IsSharedSizeScope="True"> 
    <Grid DockPanel.Dock="Top"> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="Auto" SharedSizeGroup="Col1"/> 
      <ColumnDefinition Width="5"  SharedSizeGroup="Col2"/> 
     </Grid.ColumnDefinitions> 

     <Grid.RowDefinitions> 
      <RowDefinition Height="20"/> 
      <RowDefinition Height="20"/> 
      <RowDefinition Height="Auto"/> 
      <RowDefinition Height="Auto"/> 
      <RowDefinition Height="Auto"/> 
     </Grid.RowDefinitions> 

     <GridSplitter Grid.Column="1" Grid.RowSpan="2" HorizontalAlignment="Left" Width="5" VerticalContentAlignment="Stretch" IsTabStop="False"/> 

     <TextBlock Name="ID" Grid.Row="0" Grid.Column="0" Text="ID"/> 
     <TextBox Name="TxtID" Grid.Row="0" Grid.Column="2" TabIndex="0" Text="ID"/> 

     <TextBlock Name="Description" Grid.Row="1" Grid.Column="0" Text="Description"/> 
     <TextBox x:Name="TxtDescription" Grid.Row="1" Grid.Column="2" Grid.RowSpan="1" Text="123"/> 
    </Grid> 

    <ItemsControl IsTabStop="False" 
      Grid.Row="3" Grid.Column="0" Grid.ColumnSpan="3"> 
     <ItemsControl.ItemTemplate> 
      <DataTemplate> 
       <Grid> 
        <Grid.ColumnDefinitions> 
         <ColumnDefinition Width="Auto" SharedSizeGroup="Col1"/> 
         <ColumnDefinition Width="5" SharedSizeGroup="Col2"/> 
         <ColumnDefinition Width="*"/> 
        </Grid.ColumnDefinitions> 

        <Grid.RowDefinitions> 
         <RowDefinition Height="Auto"/> 
         <RowDefinition Height="Auto"/> 
         <RowDefinition Height="Auto"/> 
        </Grid.RowDefinitions> 

        <GridSplitter Grid.Column="1" Grid.RowSpan="2147483647" Width="5" HorizontalAlignment="Left" VerticalContentAlignment="Stretch" IsTabStop="False"/> 

        <TextBlock Name="Type" Grid.Column="0" Grid.Row="0" Text="123"/> 
        <ComboBox Grid.Row="0" Grid.Column="2"/> 
       </Grid> 
      </DataTemplate> 
     </ItemsControl.ItemTemplate> 
    </ItemsControl> 
</DockPanel> 

enter image description here

enter image description here

+0

我已經更新了我的xaml代碼,但它的工作方式與以前一樣。 –

+0

好吧,你更新它可能是錯誤的,我的工作。在Dockpanel上設置Grid.IsSharedSizeScope =「True」 – Ivan

+0

它很棒! :) –