0

我有一个带有文本框和复选框的 wpf 用户控件。用户控件使用元素宿主在 winforms 选项卡控件中呈现。我希望通过单击用户控件上的按钮将用户控件弹出到一个全新的 winform 中。

我尝试了一个示例项目,我可以简单地通过

void button1_Click(object sender, EventArgs e)
{
    Form frm = new Form();
    UserControl uc = userControl11;
    frm.Controls.Add(uc);
    frm.Show();
}

但是,我想要一种方法,以便用户可以单击按钮将用户控件弹出到新表单中,然后单击相同的按钮关闭新的弹出表单并在选项卡页中显示控件。显然,所有用户输入的数据应该仍然存在。有什么想法吗?

4

2 回答 2

0

MVVM是你的朋友。将 UserControl 的所有逻辑(用户数据、弹出状态等)集中在 ViewModel 对象中,并将其设置为控件的 DataContext。要“弹出”控件,只需创建一个新控件并将其 DataContext 设置为第一个的 ViewModel。您可以在 ViewModel 中有一个属性来了解控件是否弹出,相应地采取行动并在点击弹出按钮时切换它。

于 2012-12-14T17:32:15.263 回答
0

一旦你创建了你的用户控件,它就被创建了,你可以将它分配给另一个 ElementHost(我的例子,两个表单都有元素控件)。看看这是否符合您的要求。

表格1

public partial class Form1 : Form
{
    Form2 frm2;
    bool popout = false;
    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        if (popout)
        {
            frm2.Close();
        }
        else
        {
            frm2 = new Form2();
            frm2.FormClosed += new FormClosedEventHandler(frm2_FormClosed);
            this.elementHost1.Child = null;
            frm2.setUserControl(userControl11);
            frm2.Show();
            popout = true;
        }
    }

    void frm2_FormClosed(object sender, FormClosedEventArgs e)
    {
        frm2.setUserControl(null);
        this.elementHost1.Child = userControl11;
        frm2.FormClosed -= new FormClosedEventHandler(frm2_FormClosed);
        popout = false;
    } 
}

表格2

public partial class Form2 : Form
{
    public Form2()
    {
        InitializeComponent();
    }
    public void setUserControl( System.Windows.Controls.UserControl item)
    {
        elementHost1.Child = item ;
    }
}
于 2012-12-14T17:39:15.717 回答