Это довольно просто. Есть множество способов достичь этого. Я перечислю самые простые:
Создать событие в 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);
Надеюсь, это поможет:)