[英]How to change the user control in WPF?
我正在创建类似向导的东西,并且正在使用多个用户控件,但是问题是我需要从该元素中获取父元素,以替换下一个用户控件。
我怎样才能做到这一点?
嗯,有多种方法可以完成向导,但最简单的方法是从主窗体中管理UserControl。 只需在主窗体中添加一个将成为每个用户控件父级的区域,然后在必要时从容器中添加/删除用户控件。
最优雅的方式(最好说)是使用选择器或列表框。
您的向导将包含多个页面,每个页面都会公开一个或多个信息,因此控件绑定到一些数据。 换句话说,您应该考虑拥有一个包含数据的“模型”,页面将被绑定到其中。
现在,考虑为每个页面有一个不同的模型,并为馈入ListBox的这些模型提供一个列表。 这个列表框应该已经定义了它的ItemTemplateSelector,它允许在项目数据(即模型)上选择某个DataTemplate。
此技术最难的部分是为ListBox创建/定义Control模板,该模板的形状应为仅显示所选项目(SelectedItem)。 这样,您只需更改当前选择,向导页面将自动显示。
尽管此技术显得有些矫kill过正,但相对于“经典”方法而言,它却非常方便。 您的代码更加干净,易于调试,可重用,并且模块之间的分隔度很高。 所有这些都将提供更多的可靠性和快速的开发。
假设您有5个UserControl。 创建向导时,您需要在网格内添加新的UserControl并从同一父网格中删除以前的UserControl。
以下功能将自动删除较旧的UserControl并添加新的UserControl。 。 但是对于第一个UserControl,您可以使用MyParentPanel.Children.Add(myFirstUserControl);将其直接添加到其父级中。
private void AddNewUserControlAndAutoRemoveOldUserControl(UserControl control)
{
if (control != null)
{
Panel parent = control.Parent as Panel;
if (parent != null)
{
// Removing old UserControl if present
if(parent.Children.Count > 0)
parent.Children.RemoveAt(0);
parent.Children.Insert(0, control);
}
}
}
}
希望这对您有所帮助!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.