1

我想创建一个用户控件,它的工作方式与经典面板(或画布)控件相同,希望我希望有一些用户无法删除的默认按钮。

我试过这个:

namespace WpfApplication1
{
    public class CustomPanel : Canvas
    {
        public CustomPanel()
        {
            Button b = new Button();
            b.Name = "Button1";
            b.Content = "Button1";
            this.Children.Add(b);
        }
    }
}

它可以工作,但是当我编译它并在设计器中创建 CustomPanel 的实例然后尝试插入另一个项目时,在构造函数中创建的 Button 被删除。

这是正确的方法,还是有更好(更有效/优雅)的方法,然后修改构造函数?

提前感谢您的任何努力。

4

1 回答 1

2

您的问题是您在构造函数中将 Button 添加到Children对象,然后在 XAML 中实例化它时替换整个Children对象。我猜你的 XAML 看起来像这样:?

<wpfApplication3:CustomPanel>
   <Button Content="New b"/>
</wpfApplication3:CustomPanel>

如果您像这样启动它,您会看到按钮保持在原位。

public MainWindow()
{
    InitializeComponent();
    Loaded += OnLoaded;
}

private void OnLoaded(object sender, RoutedEventArgs routedEventArgs)
{
    CustomPanel p = new CustomPanel();
    p.Children.Add(new Button(){Content = "T"});
    gr.Children.Add(p);
}

你可以做的是避免这种情况:

public CustomPanel()
{
    Initialized += OnInitialized;
}

private void OnInitialized(object sender, EventArgs eventArgs)
{
    var b = new Button { Name = "Button1", Content = "Button1" };
    Children.Insert(0,b);
}

现在等待 XAML 替换了 Children 对象,然后再添加按钮。

于 2013-01-03T12:57:22.583 回答