Смена компонента с другого экрана

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

окно [пользовательское управление]

когда я нажимаю кнопку управления пользователем, например, «изменить цвет окна», я меняю цвет фона своего окна.

как это возможно?

Будет ли, если я создам глобальный класс и помещу объект типа windows, я смогу получить к нему доступ?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
27
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы можете получить ссылку на родительское окно из UserControl с помощью метода Window.GetWindow после загрузки UserControl:

public partial class UserControl1 : UserControl
{
    public UserControl1()
    {
        InitializeComponent();
    }

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        Window parentWindow = Window.GetWindow(this);
        if (parentWindow != null)
            parentWindow.Background = Brushes.Yellow;
    }
}

Могу я спросить, зачем проверять, имеет ли parentWindow значение null?

Christopher H. 04.05.2018 17:19

Потому что лучше всего всегда проверять, действительна ли ссылка, чтобы избежать NullReferenceExceptions :) Вам не нужно делать это здесь, если только вы не приводите parentWindow к какому-то конкретному классу Window, для которого вы собираетесь установить какое-либо свойство или вызвать какой-либо метод для .

mm8 04.05.2018 17:21

Хорошо, теперь я понял :) Ага .... Я был первым, кто собирался ответить, но произошло то, что называется INTERNET DROPPED! :( ржу не могу

Christopher H. 04.05.2018 17:22
Ответ принят как подходящий

Все очень просто. Есть множество способов добиться этого. Перечислю простые:

Создайте событие в UserControl, поднимите его и слушайте

Внутри вашего UserControl создайте событие public:

> UserControl.Cs

public Event EventHandler MyEvent;
///raise the event
private void btn_Click(object sender, RoutedEventArgs e)
{
 MyEvent(this , e);
}

> Wndows.Cs

Usercontrol1.MyEvent += new System.EventHandler(this.MyMethod);

pirvate void MyMethod
{
 ////do stuff here 
}

Используйте метод GetWindow

Вы можете просто использовать метод GetWindow:

  private void btn_Click()
  {
  Window parent = Window.GetWindow(this);
  ///code here
  }

Используйте VisualTreeHelper

Вот функция, которую вы можете использовать для поиска родителя элемента управления. Это очень полезно, потому что позволяет получить не только окно, но и любого родителя дочернего элемента, например StackPanel, Grid и т. д.

 public static T FindParent<T>(DependencyObject child)where T : DependencyObject
{
DependencyObject parentObject = VisualTreeHelper.GetParent(child);
if (parentObject == null)
    return null;
T parent = parentObject as T;
if (parent != null)
    return parent;
else
    return FindParent<T>(parentObject);
}

////Call it like this :

 var parent = FindParent<Window>(this);

Надеюсь это поможет :)

Другие вопросы по теме