1

2つのウィンドウのコンテンツを共有しようとしていますが、期待どおりに機能していないようです。

これを示す簡単な例を次に示します。

class TestClass
{
    [STAThread]
    public static void Main(string[] args)
    {
        Application app = new Application();

        TextBox t = new TextBox();
        t.Text = "test";

        Window w1 = new Window();
        w1.Content = t;
        w1.Show();

        Window w2 = new Window();
        w2.Content = t;
        w2.Show();


        app.Run();
    }
}

デバッグモードでプログラムをステップスルーすると、テキストボックスがあることがわかりますが、呼び出しがテキストボックスを失うw1とすぐに...そしてそれはにのみ表示されます。w2.Content = t;w1w2

また、Xmalでバインディングを使用してみました。ここでは、両方のウィンドウが同じViewModel(MySharedContentという名前のプロパティを持つ)を指しています。

Content="{Binding Path=MySharedContent}"

しかし、それは機能しません。

これは可能ですか?私は愚かなことをしていますか?両方のウィンドウにレンダリング用のコンテンツへのポインタがあると思っていましたが、同じインスタンスを共有できないようです。

編集:

したがって、基本的な答えは、UI要素(テキストボックス、ユーザーコントロールなど)は1つの親しか持てないということです。したがって、同じ関連データを共有する2つの別個のUI要素が必要です。了解しました(すべての人の助けに感謝し、すべての人に賛成票を投じます)

4

3 に答える 3

1

コントロールの親コンテナは割り当て時に更新され、その動作が作成されると思います(最初はあなたと同じだと思っていましたが)。

何をしようとしているの?2つのウィンドウを同期させたい場合は、文字列変数を渡すことができます。この値を使用して、各代替ウィンドウのテキストボックスを更新します。

于 2012-10-31T21:31:21.953 に答える
1

アプリケーションメインで処理を実行しようとするのではなく、各フォームイベントハンドラーで処理する必要があります。

テキストボックスの例; Form1私たちにはMyTextBox、同等Form2の私のものもあります。MyTextBoxどちらの形式でも、テキストが変更されたときのイベントハンドラーがあります。イベントハンドラーがで呼び出された場合、Form2のイベントハンドラーで逆Form1を設定して実行します。Form2.MyTextBox.Text = Form1.MyTextBox.Text;

すべてのイベントハンドラーでこれを行うと、フォームは相互にミラーリングされます。

于 2012-10-31T21:34:30.847 に答える
1

コントロールには、Parent配置されたコンテナを返すプロパティがあります。したがって、各コントロールにはTextBox、サイズや場所などの独自のプロパティセットが必要なため、アプローチは機能しません。2つのウィンドウに"test"表示される値(この場合は文字列)を共有できますが、それ自体は共有できません。TextBoxesTextBoxes

2つのテキストボックスを作成してください!

于 2012-10-31T21:40:13.690 に答える