首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >生长型GridSplitter

生长型GridSplitter
EN

Stack Overflow用户
提问于 2020-01-27 16:40:10
回答 1查看 51关注 0票数 0

我有一个非常简单的要求,我似乎找不到解决办法。看看我的示例XAML代码:

代码语言:javascript
复制
<Grid ShowGridLines="True" VerticalAlignment="Top" Margin="5">
    <Grid.RowDefinitions>
        <RowDefinition MinHeight="100"/>
        <RowDefinition MinHeight="100"/>
        <RowDefinition MinHeight="100"/>
    </Grid.RowDefinitions>

    <Grid.Resources>
        <Style TargetType="GridSplitter">
            <Setter Property="HorizontalAlignment" Value="Stretch"/>
            <Setter Property="VerticalAlignment" Value="Bottom"/>
            <Setter Property="Height" Value="1"/>
            <Setter Property="Background" Value="Black"/>
        </Style>
    </Grid.Resources>

    <GridSplitter/>
    <GridSplitter Grid.Row="1"/>
    <GridSplitter Grid.Row="2"/>
</Grid>

我有三行从100开始的行。我希望用户能够拖动任何行的边缘以使其更高,所以我在每一行中都添加了一个GridSplitter

问题是:

GridSplitter控件在网格中的行或列之间重新分配空间,而不更改网格的维度。例如,当GridSplitter调整两列的大小时,一列的ActualWidth属性会增加,而另一列的ActualWidth属性会减少同样的数量。

上面的XAML无法工作,在拖动时没有一个行更改大小,因为GridSplitter试图从另一行获取高度并将其添加到正在调整大小的行中。因为没有一个行可以变小(MinHeight="100"),所以什么都不会发生。

但我不想从其他的行中取高。我希望独立地增加一行的大小,这将反过来改变Grid的总体高度。如果我将中间一行拖高50 be,我希望该行高150 be,而其他两行则保持100 be,使整个网格达到350 be。

在我缺少的GridSplitter上是否有任何允许这样做的设置?或者我还能用其他的控件吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-28 05:13:24

这就是你所期待的吗?

代码语言:javascript
复制
<StackPanel>
    <TextBlock Text="{Binding ActualHeight, 
                      ElementName=grid, 
                      StringFormat='Grid Actual Height: {0}'}" FontSize="30"/>
    <Grid x:Name="grid" Background="Aqua">
        <Grid.Resources>
            <Style TargetType="GridSplitter">
                <Setter Property="HorizontalAlignment" Value="Stretch"/>
                <Setter Property="VerticalAlignment" Value="Center"/>
                <Setter Property="Height" Value="5"/>
                <Setter Property="ShowsPreview" Value="False"/>
                <Setter Property="Background" Value="Black"/>
            </Style>
            <Style TargetType="TextBlock">
                <Setter Property="Text" 
                        Value="{Binding ActualHeight, 
                                RelativeSource={RelativeSource AncestorType=StackPanel}, 
                                StringFormat='Row Actual Height: {0}'}"/>
                <Setter Property="FontSize" Value="30"/>
                <Setter Property="HorizontalAlignment" Value="Center"/>
            </Style>
        </Grid.Resources>
        <Grid.RowDefinitions>
            <RowDefinition MinHeight="100" Height="100" />
            <RowDefinition Height="Auto" />
            <RowDefinition MinHeight="100" Height="100" />
            <RowDefinition Height="Auto" />
            <RowDefinition MinHeight="100" Height="100" />
            <RowDefinition Height="Auto" />
        </Grid.RowDefinitions>

        <StackPanel Grid.Row="0" Background="Tan">
            <TextBlock />
        </StackPanel>
        <GridSplitter Grid.Row="1"/>
        <StackPanel Grid.Row="2" Background="Brown">
            <TextBlock />
        </StackPanel>
        <GridSplitter Grid.Row="3"/>
        <StackPanel Grid.Row="4" Background="Bisque">
            <TextBlock />
        </StackPanel>
        <GridSplitter Grid.Row="5" ResizeBehavior="PreviousAndCurrent"/>
    </Grid>
</StackPanel>

问题在于将GridSplitter添加到Grid控件的方式。您可以在GridSplitter文档中获得更多关于这方面工作方式的详细信息。这还包括如何使用ResizeBehavior;这是我用来让它在最后一行工作的

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59935363

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档