Как создать пользовательские компоненты для WPF в C # - PullRequest
0 голосов
/ 05 декабря 2018

Я изучаю 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 голосов
/ 05 декабря 2018

Хорошо, для всех, кто заинтересован, у меня все работает так, как я себе представлял.Это требует некоторой очистки, но концепция есть.

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 # и не имею большого опыта программирования с самого начала.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...