共享网格分割器

时间:2016-02-19 09:01:31

标签: c# wpf

我有一个网格,其中包含一个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>

1 个答案:

答案 0 :(得分:2)

好的,如果您实际取出itemscontrol并将其移出网格,然后将所有内容放入dockpanel,该怎么办?

<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