Проблема изменения размера с несколькими сеточными сплиттерами и различными размерами - PullRequest
0 голосов
/ 25 февраля 2019

У меня странная проблема с Gridsplitters, которую я пытался решить весь день, но ни документация, ни Google действительно не смогли помочь мне с этой проблемой.

Проблема в том, чтоУ меня есть сетка с несколькими сеточными сплиттерами, где некоторые строки имеют разные единицы высоты.Три строки имеют конкретные значения высоты, а одна строка имеет 1 звезду, чтобы она «впитывала» все оставшееся пространство.

К сожалению, это вызывает некоторое странное поведение gridsplitter.По сути, попытка установить высоту GridRow 4 и 6 с помощью манипулятора gridsplitter в строке 5 не повлияет на высоту строки 6, нижнего ряда.Вместо этого он манипулирует строкой 4 и строкой 2 и перекрывает сплиттер сетки в строке 3.

Если бы я установил все высоты строки на определенную высоту пикселя, все сплиттеры сетки работают нормально, но это позволяет сетке расти дальше.край экрана, который не соответствует предназначению.

Я сделал небольшой пример проекта для иллюстрации проблемы.

<Window x:Class="GridSplitterTest.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:local="clr-namespace:GridSplitterTest"
    mc:Ignorable="d"
    Title="MainWindow" Height="350" Width="525">
<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="100"></RowDefinition>
        <RowDefinition Height="Auto"></RowDefinition>
        <RowDefinition Height="*"></RowDefinition>
        <RowDefinition Height="Auto"></RowDefinition>
        <RowDefinition Height="100"></RowDefinition>
        <RowDefinition Height="Auto"></RowDefinition>
        <RowDefinition Height="50"></RowDefinition>
    </Grid.RowDefinitions>

    <TextBlock Grid.Row="0" HorizontalAlignment="Center" VerticalAlignment="Center" >TextBlock01</TextBlock>
    <GridSplitter Grid.Row="1" Height="5" HorizontalAlignment="Stretch" VerticalAlignment="Center" Background="Black" ResizeBehavior="PreviousAndNext" ResizeDirection="Rows"></GridSplitter>
    <TextBlock Grid.Row="2" HorizontalAlignment="Center" VerticalAlignment="Center" >TextBlock02</TextBlock>
    <GridSplitter Grid.Row="3" Height="5" HorizontalAlignment="Stretch" VerticalAlignment="Center" Background="Black" ResizeBehavior="PreviousAndNext" ResizeDirection="Rows"></GridSplitter>
    <TextBlock Grid.Row="4" HorizontalAlignment="Center" VerticalAlignment="Center" >TextBlock03</TextBlock>
    <GridSplitter Grid.Row="5" Height="5" HorizontalAlignment="Stretch" VerticalAlignment="Center" Background="Black" ResizeBehavior="PreviousAndNext" ResizeDirection="Rows"></GridSplitter>
    <TextBlock Grid.Row="6" HorizontalAlignment="Center" VerticalAlignment="Center" >TextBlock04</TextBlock>

</Grid>

Любой, у кого естьхорошая идея о том, что не так и есть ли способ решить эту проблему?

1 Ответ

0 голосов
/ 26 февраля 2019

Я не думаю, что здесь что-то не так.У вас есть все ряды, но один установлен на фиксированный размер.Таким образом, корректировка любой высоты строки позволяет только сетке перенастроить одну строку (строка № 2) для компенсации, поскольку остальные оставшиеся строки (строки № 0 и 6) также имеют фиксированный размер.

Я думаю, чтоЕдинственный способ решить эту проблему - сделать все строки текстового блока пропорциональными.Например:

<Grid.RowDefinitions>
    <RowDefinition Height="3*"></RowDefinition>
    <RowDefinition Height="Auto"></RowDefinition>
    <RowDefinition Height="1*"></RowDefinition>
    <RowDefinition Height="Auto"></RowDefinition>
    <RowDefinition Height="3*"></RowDefinition>
    <RowDefinition Height="Auto"></RowDefinition>
    <RowDefinition Height="2*"></RowDefinition>
</Grid.RowDefinitions>
...