【问题标题】:Mimicking User controls模仿用户控制
【发布时间】:2012-12-14 16:49:17
【问题描述】:

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

我尝试了一个示例项目,我可以简单地做到这一点

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

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

【问题讨论】:

  • 你为什么使用 WinForms TabControl?

标签: wpf user-controls popup


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    一旦你创建了你的 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;
        } 
    }
    

    Form2

    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }
        public void setUserControl( System.Windows.Controls.UserControl item)
        {
            elementHost1.Child = item ;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-09-19
      • 1970-01-01
      • 1970-01-01
      • 2010-10-01
      • 1970-01-01
      • 2011-03-21
      • 1970-01-01
      相关资源
      最近更新 更多