WPF c#自定义面板
本文关键字:自定义 WPF | 更新日期: 2023-09-27 17:50:37
我想创建一个用户控件,它将以与经典面板(或画布)控件相同的方式工作,期望我想有一些默认的按钮,用户将无法删除。
我试过了:
namespace WpfApplication1
{
public class CustomPanel : Canvas
{
public CustomPanel()
{
Button b = new Button();
b.Name = "Button1";
b.Content = "Button1";
this.Children.Add(b);
}
}
}
它工作,但当我编译它并在设计器中创建一个CustomPanel实例,然后尝试插入另一个项目时,在构造函数中创建的按钮被删除。
这是正确的方法,还是有一个更好的(更有效/优雅)的方式来修改构造函数?
提前感谢您的努力
您的问题是您在构造函数中将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对象之后,再添加按钮。