Mitja Klokočovnik Ответов: 0

Как я могу общаться между дочерним и родительским окном в WPF?


Я пытаюсь построить программу, где у меня есть простая клавиатура в дочернем окне. В моем родительском окне у меня есть кнопка, которая открывает мою клавиатуру и два текстовых поля. Когда я нажимаю на свои кнопки в окне клавиатуры (дочернем), оно должно отображать значения в текстовых полях, которые представляются определенной кнопкой. Что я должен сделать, чтобы это общение между ребенком и родителем работало?

Что я уже пробовал:

Я нашел несколько хороших ресурсов по делегатам и попробовал использовать этот код, но он все равно не работает. Функция вызова, похоже, не работает, потому что мое текстовое поле все еще пусто, когда я нажимаю на кнопки клавиатуры.

Мое родительское окно:

public partial class MainWindow : MetroWindow
    {
       
        public MainWindow()

        {
            InitializeComponent();

        }

        public void WriteToTextBoxes(string a)
        {
            TextBox2.Text += a;
        }

        private void MetroWindow_Loaded(object sender, RoutedEventArgs e)
        {
            TextBox1.Text = String.Empty;
            TextBox2.Text = String.Empty;
        }


Окно моего ребенка:

public partial class KeyboardWindow : MetroWindow
{
    public delegate void someDelegate(string a);
    MainWindow _mainW = new MainWindow();

    public KeyboardWindow()
    {
        InitializeComponent();

    }

    private void Window_Loaded(object sender, RoutedEventArgs e)
    {


    }

    private void Window_Closed(object sender, EventArgs e)
    {

    }

    private void KeypadOne_Click(object sender, RoutedEventArgs e)
    {
        someDelegate p = null;
        p = this._mainW.WriteToTextBoxes;
        p.Invoke("1");

    }

CHill60

"не смог заставить его работать" не помогает. Опубликуйте код, с которым вы боретесь, и объясните, что происходит не так. Используйте Улучшить вопрос ссылка для этого

[no name]

"MainWindow _mainW = new MainWindow ();" потому что вы создаете экземпляр совершенно нового, никогда ранее не использовавшегося или виденного окна и используете его вместо уже существующего экземпляра окна.

Mitja Klokočovnik

Хорошо,как же мне тогда создавать экземпляры? Я совершенно новичок в WPF и самом программировании, так что извините, если это покажется вам слишком тривиальным.

Mitja Klokočovnik

private MainWindow m_parent;

public KeyboardWindow(MainWindow parent)
{
метод InitializeComponent();
m_parent = родитель;
}

Решить ее :)

Philippe Mori

Обычно это плохой дизайн, когда компоненту нужно знать своего родителя. Вы должны использовать события для этой цели.

Mitja Klokočovnik

Хорошо, спасибо :)

0 Ответов