Как убрать кнопку внутри Dockpanel из макета - WPF - PullRequest
2 голосов
/ 30 августа 2011

У меня есть док-панель с двумя кнопками внутри

    <Window x:Class="PracticeWPF.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
<DockPanel LastChildFill="True">
            <Button Name="btn1" DockPanel.Dock="Top">Button 1</Button>        
            <Button Name="btn2" DockPanel.Dock="Top" Visibility="Collapsed">Button 2</Button>       
    </DockPanel></Window>

Проблема в том, что кнопка btn2 участвует в макете, даже если ее Visibility = "Collapsed". Я ожидаю, что btn1 должен заполнить все пространство. Вместо этого btn1 придерживается верхней позиции окна. Вышеуказанный код должен быть эквивалентен

<DockPanel LastChildFill="True">
        <Button Name="btn1" DockPanel.Dock="Top">Button 1</Button>
        <!--
        <Button Name="btn2" DockPanel.Dock="Top" Visibility="Collapsed">Button 1</Button>
        -->
    </DockPanel>

Почему это происходит.

Ответы [ 3 ]

3 голосов
/ 30 августа 2011

Vinod, в DockPanel, последний элемент всегда будет занимать оставшуюся часть макета в DockPanel.поскольку вы уже установили Top на свою первую кнопку, я думаю, свойство Dock на второй будет игнорироваться.

вместо использования DockPanel, вы можете попробовать "Grid" панель со свойством AutoSize?

0 голосов
/ 30 августа 2011

Приведенный выше код должен быть эквивалентен ...

Нет, это просто ложное предположение с вашей стороны. Свернутая кнопка по-прежнему является последним дочерним элементом, поэтому первая кнопка по-прежнему закреплена наверху, свернутая кнопка не имеет ничего общего с макетом.

0 голосов
/ 30 августа 2011

Вы можете получить желаемое поведение, добавив / удалив кнопку вручную в свойство DockPanel.Children. Подробнее о MSDN Panel. Детская статья.

...