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

时间:2011-08-26 04:36:52

标签: c# wpf

我正在创建类似向导的东西,而且我正在使用多个用户控件,但问题是我需要从该元素中获取父级以替换下一个用户控件。

我该怎么做?

3 个答案:

答案 0 :(得分:0)

嗯,有多种方法可以完成向导,但最简单的方法是从主窗体管理UserControls。只需在主窗体中添加一个区域作为每个用户控件的父窗口,然后在必要时从容器中添加/删除用户控件。

答案 1 :(得分:0)

最优雅的方式(我说最好)是使用Selector或ListBox。

您的向导将有多个页面,每个页面都会显示一个或多个信息,从而控制绑定到某些数据。换句话说,您应该考虑使用包含数据的“模型”,页面将绑定到该模型。

现在,考虑为每个页面设置一个独特的模型,以及为ListBox提供这些模型的列表。这个ListBox应该定义了它的ItemTemplateSelector,它允许在项目数据(即模型)上选择某个DataTemplate。

这项技术最难的部分是创建/定义ListBox的Control模板,该模板应该被整形以仅显示所选项目(SelectedItem)。通过这种方式,您只需更改当前选择,向导页面将自动显示。

虽然这种技术看起来有点矫枉过正,但对于“经典”方法却非常方便。您的代码更干净,更易于调试,可重复使用,并提供模块之间的高度分离。所有这些都将提供更多可靠性和快速开发。

答案 2 :(得分:0)

让我们认为你有5个UserControls。在创建向导时,您需要在网格中添加新的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);
                }
            }
        }
}

希望这能帮到你!