使用LastChildFill以编程方式替换WPF DockPanel中的最后一个子项

时间:2009-12-07 01:15:39

标签: c# wpf dockpanel

DockPanel LastChildFill 属性设置为 true 时,添加的最后一个子项占用整个未使用的空间。

这很有效,直到我不得不以编程方式替换最后一个孩子:

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

现在,新添加的控件不再填充空间。

我该如何解决问题?

2 个答案:

答案 0 :(得分:0)

这对我来说对这个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);
}

当您单击文本1时,文本块将被替换,其中一个按钮具有背景设置,因此您可以看到它已经发生。

答案 1 :(得分:0)

谢谢Simeon。事实证明,我的困惑来自于我对“填充”的误解。显然,“填充”并不意味着占据整个空间。相反,如果指定了大小,则新添加的控件将居中。