WPF: GridSplitter не виден, но работает как положено - PullRequest
0 голосов
/ 18 января 2019

Я создаю новое приложение WPF, в котором главное окно имеет сетку внутри панели док-станции. Сетка будет иметь 3 столбца и одну строку, из которых средний столбец выделен для GridSplitter. Два других столбца имеют панель закрепления, в которой будет любое содержимое (которое будет создано во время выполнения). Моя проблема в том, что, несмотря на несколько подходов, чтобы сделать GridSplitter видимым, я не добился успеха.

Я даже следовал советам, приведенным на этой странице с инструкциями в документации Microsoft, но безрезультатно: https://docs.microsoft.com/en-us/dotnet/framework/wpf/controls/how-to-make-sure-that-a-gridsplitter-is-visible

Вот мой код XAML:

<Window
...
Height="600"
Width="650">

    <DockPanel LastChildFill="True">

         <Grid VerticalAlignment="Stretch" HorizontalAlignment="Stretch">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="Auto"/>
                <ColumnDefinition Width="10"/>
                <ColumnDefinition Width="Auto"/>
            </Grid.ColumnDefinitions>

            <DockPanel Name="LeftDockPanel" Grid.Column="0" LastChildFill="True" Width="350" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Background="LightCyan">

            </DockPanel>

            <DockPanel Name="RightDockPanel" Grid.Column="2" LastChildFill="True" Width="300" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Background="Azure">

            </DockPanel>

            <GridSplitter Width="5" Background="Red" Grid.Column="1" BorderBrush="Red"
                          VerticalAlignment="Stretch" HorizontalAlignment="Center"
                          Margin="3,0,3,0" ResizeBehavior="PreviousAndNext" Panel.ZIndex="1"/>

        </Grid>

    </DockPanel>

</Window>

Я попытался сделать следующее с моим кодом:

  1. Назначил ZIndex = 1 для разделителя сетки, когда он разделяет столбец с LeftDockPanel

  2. Явно выделил столбец для разделителя, присвоив ему ширину

  3. Гарантировано, что GridSplitter является последним элементом управления, добавленным в сетку

  4. Комбинация 2, 3 и 4 - как вы видите в коде.

При наведении курсора мыши на соответствующую область курсор изменяется, чтобы отобразить gridSplitter, но он никогда не виден. Даже действия по изменению размера работают, как и ожидалось.

Что я упускаю или делаю неправильно, что GridSplitter не виден?

1 Ответ

0 голосов
/ 18 января 2019

Ваша проблема не воспроизводима. Может быть, вы где-то определили неявное Style. Попробуйте установить для свойства Template собственный шаблон:

<GridSplitter Width="5" Background="Red" Grid.Column="1" BorderBrush="Red"
              VerticalAlignment="Stretch" HorizontalAlignment="Center"
              Margin="3,0,3,0" ResizeBehavior="PreviousAndNext">
    <GridSplitter.Template>
        <ControlTemplate TargetType="{x:Type GridSplitter}">
            <Border BorderBrush="{TemplateBinding BorderBrush}" 
                    BorderThickness="{TemplateBinding BorderThickness}" 
                    Background="{TemplateBinding Background}"/>
        </ControlTemplate>
    </GridSplitter.Template>
</GridSplitter>
...