如何在C#中为WPF创建自定义组件

时间:2018-12-05 16:42:04

标签: c# wpf

我在WPF中玩耍,后面有代码,我想知道如何通过创建一个新类来创建可回收的自定义组件。我之前已经在ReactJS中做到了这一点,但我不知道如何在c#中使其工作。

这是我的简化代码,只是为了了解事物的工作原理

 public class CustomButtonInStackPanel
{
    public StackPanel StackPanel = new StackPanel();

    public CustomButtonInStackPanel(int width, int height)
    {
        Button btn = new Button
        {
            Width = width,
            Height = height,
            Content = "hello world!!"
        };
        StackPanel.Children.Add(btn);
    }
}

然后在主窗口中

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();

        this.Content = new CustomButtonInStackPanel(200, 100);
    }
}

问题是我得到的只是类名,而不是堆栈面板内部的实际按钮。

1 个答案:

答案 0 :(得分:-2)

好吧,对于任何有兴趣的人,我都能按照我的想象进行。它有一些清理工作要做,但是概念在那里。

public MainWindow()
    {
        InitializeComponent();
        StackPanelOfButtons stackPanelOfButtons = new StackPanelOfButtons(
            new List<myButton>{
                new myButton(50, 100, "It Worked!"),
                new myButton(100, 150, "We have more buttons"),
                new myButton(150, 200, "And a third button")});
        this.Content = stackPanelOfButtons.stackPanel;
    }

然后点击按钮

public class myButton : UIElement
{
    public Button btn = new Button();

    public myButton(int width, int height, string content)
    {
        btn.Width = width;
        btn.Height = height;
        btn.Content = content;
    }
}

这里的问题之一是没有实现UIElement。 现在是StackPanel,

public class StackPanelOfButtons : UIElement
{
    public StackPanel stackPanel = new StackPanel();

    public StackPanelOfButtons(List<myButton> buttons)
    {
        buttons.ForEach(b => stackPanel.Children.Add(b.btn)); 
    }
}

这是一个不错的小实验,因为我对c#还是很陌生,并且没有太多的编程经验。