如何从用户控件修改主机 window?
how to modify the host window from a user control?
我正在使用 WPF 编写一个 C# 应用程序
我有一个主 Window,其中包含一个名为“SelectionGrid”的网格。这个网格将包含控制用户,我的问题是我想从用户控制本身修改(add/delete)那个网格中的控制用户
例如:
SelectionGrid 在这个菜单中承载用户控件“菜单”,那里有一个按钮,我想从此按钮删除菜单用户控件并在此 SelectionGrid
中添加另一个用户控件
主要window代码:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
UserControl usc = new Menu();
SelectionGrid.Children.Add(usc);
}}
菜单用户控制代码:
public partial class Menu : UserControl
{
public Menu()
{
InitializeComponent();
}
private void Button_Click(object sender, RoutedEventArgs e)
{
// want to add Another User Control in SelectionGrid
}
首先,将您的 userControl 放在一些容器控件中,例如 Grid
。然后您可以从 usercontrol 轻松访问和修改网格,如下所示:
var parent = (Grid)this.Parent;
///do what you want to do with parent
一点knowledge-sharing:下面的代码可用于访问像Page
、UserControl
这样的控件的父级:
public static T FindParent(DependencyObject child)
{
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);
}
private void test()
{
ControlTypeHere parent = FindParent<ControlTypeHere>(this);
希望对您有所帮助:)
我正在使用 WPF 编写一个 C# 应用程序
我有一个主 Window,其中包含一个名为“SelectionGrid”的网格。这个网格将包含控制用户,我的问题是我想从用户控制本身修改(add/delete)那个网格中的控制用户
例如: SelectionGrid 在这个菜单中承载用户控件“菜单”,那里有一个按钮,我想从此按钮删除菜单用户控件并在此 SelectionGrid
中添加另一个用户控件主要window代码:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
UserControl usc = new Menu();
SelectionGrid.Children.Add(usc);
}}
菜单用户控制代码:
public partial class Menu : UserControl
{
public Menu()
{
InitializeComponent();
}
private void Button_Click(object sender, RoutedEventArgs e)
{
// want to add Another User Control in SelectionGrid
}
首先,将您的 userControl 放在一些容器控件中,例如 Grid
。然后您可以从 usercontrol 轻松访问和修改网格,如下所示:
var parent = (Grid)this.Parent;
///do what you want to do with parent
一点knowledge-sharing:下面的代码可用于访问像Page
、UserControl
这样的控件的父级:
public static T FindParent(DependencyObject child)
{
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);
}
private void test()
{
ControlTypeHere parent = FindParent<ControlTypeHere>(this);
希望对您有所帮助:)