我有一个带有文本框和复选框的wpf用户控件。 usercontrol使用元素主机在winforms Tab控件中显示。我希望用户控件通过单击用户控件上的按钮弹出一个全新的winform。
我尝试了一个示例项目,我可以通过
来完成void button1_Click(object sender, EventArgs e)
{
Form frm = new Form();
UserControl uc = userControl11;
frm.Controls.Add(uc);
frm.Show();
}
但是,我想要一种方法,以便用户可以单击按钮将用户控件弹出到新表单,然后单击相同按钮关闭新弹出窗体并在标签页中显示控件。显然,所有用户输入的数据仍应存在。有什么想法吗?
答案 0 :(得分:0)
MVVM是你的朋友。将UserControl的所有逻辑(用户数据,弹出状态等)集中在ViewModel对象中,并将其设置为控件的DataContext。要“弹出”控件,只需创建一个新控件并将其DataContext设置为第一个的ViewModel。您可以在ViewModel中拥有一个属性,以了解控件是否弹出,相应地执行操作并在按下弹出按钮时切换它。
答案 1 :(得分:0)
创建userControl后,它就会被创建,你可以将它分配给另一个ElementHost(我的例子中,两个表单都有元素控件)。看看这是否符合您的要求。
<强> Form1中强>
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 ;
}
}