2011-08-26 45 views
0

我创建了一个像向导一样的东西,并且我使用了多个用户控件,但是我需要从该元素获取父元素来替换下一个用户控件。如何更改WPF中的用户控件?

我该怎么做?

+0

您可能想查看PRISM来管理您的意见。它允许你定义你的主窗口的区域,并且当你向其他视图请求导航时,它将显示并隐藏你的用户控件视图。它乍一看似乎令人望而生畏,但一旦掌握了它,就会让您的导航逻辑更加轻松。 –

回答

0

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

希望这可以帮助你!

0

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

0

最优雅的方式来做到这一点(我会说最好的)是使用选择器或列表框。

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

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

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

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