Формы Tenhos 2, где одно - это пользовательское управление, а второе - обычное окно. поэтому я загружаю этот пользовательский элемент управления в свое окно. Я бы хотел изменить значение в моем окне, когда я нажимаю кнопку управления пользователем.
окно [пользовательское управление]
когда я нажимаю кнопку управления пользователем, например, «изменить цвет окна», я меняю цвет фона своего окна.
как это возможно?
Будет ли, если я создам глобальный класс и помещу объект типа windows, я смогу получить к нему доступ?





Вы можете получить ссылку на родительское окно из 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;
}
}
Потому что лучше всего всегда проверять, действительна ли ссылка, чтобы избежать NullReferenceExceptions :) Вам не нужно делать это здесь, если только вы не приводите parentWindow к какому-то конкретному классу Window, для которого вы собираетесь установить какое-либо свойство или вызвать какой-либо метод для .
Хорошо, теперь я понял :) Ага .... Я был первым, кто собирался ответить, но произошло то, что называется INTERNET DROPPED! :( ржу не могу
Все очень просто. Есть множество способов добиться этого. Перечислю простые:
Создайте событие в 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);
Надеюсь это поможет :)
Могу я спросить, зачем проверять, имеет ли parentWindow значение null?