Изменение компонента с другого экрана - PullRequest
0 голосов
/ 04 мая 2018

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

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

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

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

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

Ответы [ 2 ]

0 голосов
/ 04 мая 2018

Это довольно просто. Есть множество способов достичь этого. Я перечислю самые простые:

Создать событие в 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);

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

0 голосов
/ 04 мая 2018

Вы можете получить ссылку на родительское окно из 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;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...