-1

Как программно изменить title другого xaml окна? Из xaml страницы? Пробовал так - MainMenu.Title = "new title";(MainMenu объявил), но выбивает ошибку -

System.NullReferenceException: 'Object reference not set to an instance of an object.'

И как программно менять xaml элементы? Например колонки в dataGrid, не только их имя но и количество и т.д.?

evelyn
  • 3

1 Answers1

0

Например так: у меня есть MainWindow с кнопкой и Window1 с кнопкой, в Window1 я добавляю параметр в конструктор и поле для хранения ссылки, по нажатию кнопки теперь я могу обратиться по ссылке к этому окну, на которое получена ссылка:

public partial class Window1 : Window
{
    Window targetWindow;

    public Window1(Window targetWindow)
    {
        InitializeComponent();
        this.targetWindow = targetWindow;
    }

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        targetWindow.Title = "New title!";
    }
}

Теперь, при создании окна Window1 необходимо передать ему ссылку на окно, в котором нужно менять свойство, обработчик клика по кнопке MainWindow:

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

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        var window = new Window1(this);
        window.ShowDialog();
    }
}
  • Спасибо. А как выглядит "параметр в конструктор и поле для хранения ссылки"? – evelyn Dec 29 '17 at 10:53
  • Ну в ответе это же всё есть: public Window1(Window targetWindow) - это конструктор с параметром, Window targetWindow; - это поле – Андрей NOP Dec 29 '17 at 11:54
  • Заработало. Большое спасибо! – evelyn Dec 29 '17 at 16:22
  • Теперь я из третьего окна меню title таким образом - MainWindow MainWin = new MainWindow(); DefaultTitle DefTitle = new DefaultTitle(); DefTitle.SetDefaultTitle(MainWin); MessageBox.Show(MainWin.Title); Класс defaulTitle - public void SetDefaultTitle(Window MainWin) { MainWin.Title = "Главное меню2"; } MessageBox выводит главное меню2, а заголовок не меняется. Почему? – evelyn Dec 29 '17 at 16:44
  • Потому что вы создаете новое окно и меняете заголовок у него, а вам нужно поменять заголовок у существующего окна – Андрей NOP Dec 29 '17 at 17:03