Как я могу общаться между дочерним и родительским окном в 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
Хорошо, спасибо :)