繁体   English   中英

如何在WPF中更改用户控件?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM