Почему граница останавливает рендеринг минус поля при изменении размера сетки - PullRequest
1 голос
/ 04 февраля 2020

Я использовал границу с отрицательным полем, чтобы отметить строку сетки. Но я получаю странное поведение при изменении размера окна. Обрезка второго столбца строки приводит к исчезновению поля границы:

Lost borderbackground

Конечно, это небольшой пример, в основном приложении I ' м, используя разделитель сетки, но поведение остается прежним. Можно ли это как-то исправить или это ошибка WPF?

MainWindow.xaml:

<Window x:Class="TestHighlightBorder.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:TestHighlightBorder"
    mc:Ignorable="d"
    Title="MainWindow" Height="450" Width="800">

<Grid Margin="100,0,0,0" >

    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="200" />
        <ColumnDefinition Width="10" />
        <ColumnDefinition Width="*" />
    </Grid.ColumnDefinitions>

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

    <Border Background="DarkRed" Opacity="0.3" Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="3" Margin="-80,0,0,0" Panel.ZIndex="1" />
    <TextBlock Text="column 0" Background="LightBlue" Grid.Row="0" Grid.Column="0" />
    <TextBlock Text="column 2" Background="LightGreen" Grid.Row="0" Grid.Column="2" />

</Grid>

ps: Так выглядит основное приложение. Это какая-то сетка свойств. Величина отрицательного поля зависит от уровня вложенности объектов. main app

Ответы [ 2 ]

1 голос
/ 04 февраля 2020

Я попробовал ваш пример, и это происходит так, как вы сказали: столбец 2 пропал, поле пропало.
Это происходит, когда сетка не может быть отображена полностью.
Если, например, вы установили третий При определении столбца до 200 поле исчезает, как только столбец 2 не отображается полностью. То же самое происходит, когда вы изменяете размер окна снизу.

Если вы поместите существующую сетку в другой контейнер (Grid, StackPanel и т. Д. c.) И установите для параметра MinWidth значение, по крайней мере, равное размеру ширины столбцов + поля (в вашем примере 310) Такого не бывает.

Вот так:

<StackPanel MinWidth="310">
    <Grid Margin="100,0,0,0" >

        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="200" />
            <ColumnDefinition Width="10" />
            <ColumnDefinition Width="*" />
        </Grid.ColumnDefinitions>

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

        <Border Background="DarkRed" Opacity="0.3" Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="3" Margin="-80,0,0,0" Panel.ZIndex="1" />
        <TextBlock Text="column 0" Background="LightBlue" Grid.Row="0" Grid.Column="0" />
        <TextBlock Text="column 2" Background="LightGreen" Grid.Row="0" Grid.Column="2" />

    </Grid>
</StackPanel>
1 голос
/ 04 февраля 2020

Вместо добавления 100 левого поля в сетку, вы можете просто зафиксировать столбец в начале с шириной 100, установить интервал столбца границы на 4, заменить отрицательное поле на 20 положительных левых. поле (100-80 = 20) и добавьте 1 к значению Grid.Column для каждого из ваших элементов управления. Таким образом, последний подход будет выглядеть так:

<Grid>

    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="100" />
        <ColumnDefinition Width="200" />
        <ColumnDefinition Width="10" />
        <ColumnDefinition Width="*" />
    </Grid.ColumnDefinitions>

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

    <Border Background="DarkRed" Opacity="0.3" Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="4" Margin="20,0,0,0" Panel.ZIndex="1" />
    <TextBlock Text="column 0" Background="LightBlue" Grid.Row="0" Grid.Column="1" />
    <TextBlock Text="column 2" Background="LightGreen" Grid.Row="0" Grid.Column="3" />

</Grid>
...