显示在wpf中使用用户控件的孩子

时间:2015-01-03 12:14:08

标签: c# wpf

Reuirement:

需要在主布局中显示所有子页面。没有打开新窗口我的意思是它不应该作为与主窗口的单独窗口可见

解决方案我想:

我在主页面中使用了内容展示器。 将所有其他页面创建为用户控件。 点击菜单ViewWindow.Content = new SalesEntry(); 通过使用我正在显示。

问题:

要关闭该用户控件,我使用了一个按钮单击(用户控件中的按钮) 预先形成this.Visibility = Visibility.Hidden;

但每当用户请求此页面时,页面都会被初始化并显示出来。

那么,最好的方法是克服这种情况或以其他方式解决这个问题。 (我被告知不要使用任何框架作为项目要求)

我是非常新的WPF ..

请帮助我..

1 个答案:

答案 0 :(得分:1)

你在做什么都没关系,我真的不明白这里的问题,但我会告诉你我会怎么做。

您将拥有一个父视图,一个Window。你会有很多孩子,UserControl's。

在您的窗口内,您应该有一种方法来选择要显示的孩子。这可以使用按钮或菜单完成。

选择子项时,将其实例化为对象并订阅其exit事件。当孩子触发此事件时,您将在父窗口中从孩子中删除该孩子。

// This one defines the signature of your exit event handler
public delegate void OnExitHandler(UserControl sender);

// This is your child, UserControl
public partial class MyChild : UserControl
{
    public event OnExitHandler OnExit;

    public MyChild()
    {
        InitializeComponent();
    }

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        this.OnExit(this);
    }
}

// This is your parent, Window
public partial class MainWindow : Window
{
    private MyChild _control; // You can have a List<UserControl> for multiple

    public MainWindow()
    {
        InitializeComponent();
    }

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        _control = new MyChild();
        _control.OnExit += _control_OnExit; // Subscribe to event so you can remove the child when it exits
        _content.Content = _control; // _content is a ContentControl defined in Window.xaml
    }

    private void _control_OnExit(UserControl sender)
    {
        if(sender == _control)
        {
            // Or if you have a collection remove the sender like
            // _controls.Remove(sender);
            _control = null;
            _content.Content = null;
        }
    }
}

如果您的问题不是其他问题,请发表评论。