WPF C#定制面板
我想创建一个用户控件,它的工作方式与经典的面板(或画布)控件相同,我希望有一些用户无法删除的默认按钮 我试过这个:WPF C#定制面板,c#,wpf,xaml,user-controls,C#,Wpf,Xaml,User Controls,我想创建一个用户控件,它的工作方式与经典的面板(或画布)控件相同,我希望有一些用户无法删除的默认按钮 我试过这个: namespace WpfApplication1 { public class CustomPanel : Canvas { public CustomPanel() { Button b = new Button(); b.Name = "Button1";
namespace WpfApplication1
{
public class CustomPanel : Canvas
{
public CustomPanel()
{
Button b = new Button();
b.Name = "Button1";
b.Content = "Button1";
this.Children.Add(b);
}
}
}
它可以工作,但当我编译它并在设计器中创建CustomPanel的实例,然后尝试插入另一项时,在构造函数中创建的按钮会被删除
这到底是正确的方法还是有更好(更有效/更优雅)的方法来修改构造函数
提前感谢您的努力。您的问题是将按钮添加到构造函数中的子对象中,然后在XAML中对其进行实例时替换整个子对象。 我猜你的XAML是这样的:
<wpfApplication3:CustomPanel>
<Button Content="New b"/>
</wpfApplication3:CustomPanel>
要避免这种情况,您可以采取以下措施:
public CustomPanel()
{
Initialized += OnInitialized;
}
private void OnInitialized(object sender, EventArgs eventArgs)
{
var b = new Button { Name = "Button1", Content = "Button1" };
Children.Insert(0,b);
}
现在,在添加按钮之前,请等待XAML替换了子对象。是否确实删除了在ctor中创建的按钮?还是新来的孩子就躺在老孩子的身上?请在添加第二个项目的地方张贴代码。是的,它已被删除。我没有在代码中添加第二项,而是在设计器中添加第二项,因此在添加第二项后,它看起来是这样的:我尝试了两种方法(在代码和设计器中添加按钮),在这两种情况下,新按钮都没有删除任何内容,只是覆盖了旧按钮。如果您自己解决了问题,请张贴正确的答案并将其标记为答案,因此,有相同问题的人可以从中受益。我尝试复制粘贴代码,但不幸的是,它对我不起作用-我的意思是,当我编译代码并将CustomPanel用户控件添加到窗口,然后将另一个按钮添加到CustomPanel时,第一个按钮仍然被删除。我尝试了这两种方法。不管怎样,我刚刚想出了解决问题的办法。谢谢你的帮助。
public CustomPanel()
{
Initialized += OnInitialized;
}
private void OnInitialized(object sender, EventArgs eventArgs)
{
var b = new Button { Name = "Button1", Content = "Button1" };
Children.Insert(0,b);
}