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

userControl を作成すると、それが作成され、別の ElementHost に割り当てることができます (私の例では、両方のフォームに要素 Controls があります)。これで目的が達成されるかどうかを確認してください。

フォーム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 に答える