Программная замена последнего дочернего элемента в DockPanel WPF с LastChildFill true - PullRequest
0 голосов
/ 07 декабря 2009

Когда LastChildFill свойство DockPanel установлено true , последний добавленный дочерний объект занимает все неиспользуемое пространство.

Это хорошо работает, пока мне не пришлось программно заменить последнего ребенка:

UIElementCollection children = myDockPanel.Children;
UIElement uie = new myBestControl();
children.RemoveAt(children.Count - 1);
children.Add(uie);

Теперь вновь добавленный элемент управления больше не заполняет пространство.

Как мне решить проблему?

Ответы [ 2 ]

0 голосов
/ 08 декабря 2009

Спасибо, Симеон. Оказывается, моя путаница возникла из-за моего недопонимания "заполнения". Видимо, «заполнять» вовсе не обязательно значит занимать все пространство. Вместо этого новый элемент управления будет центрирован, если указан его размер.

0 голосов
/ 07 декабря 2009

у меня работает с этим xaml

<DockPanel x:Name="MyDock" LastChildFill="True">
    <TextBlock DockPanel.Dock="Left" 
               MouseDown="TextBlock_MouseDown">Child 1</TextBlock>
    <TextBlock DockPanel.Dock="Left">Child 2</TextBlock>
    <TextBlock>Child 3</TextBlock>
</DockPanel>

и этот код

private void TextBlock_MouseDown(object sender, MouseButtonEventArgs e)
{
    UIElementCollection children = MyDock.Children;
    Button btn = new Button();
    btn.Background = Brushes.LightBlue;

    children.RemoveAt(children.Count - 1);
    children.Add(btn);
}

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

...