同时在两个窗口之间共享内容

时间:2012-10-31 21:26:55

标签: c# wpf

我试图让两个窗口的内容共享,但它似乎没有像我期望的那样工作。

以下是一个显示此内容的简单示例:

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;然后w1丢失了文本框......然后它只显示在w2

我也尝试在Xmal中使用绑定,其中两个窗口都指向同一个ViewModel(具有名为MySharedContent的属性)

Content="{Binding Path=MySharedContent}"

但它不起作用。

这可能吗?我做了些蠢事吗?我以为这两个窗口都会有一个指向渲染内容的指针......但是它们似乎无法共享同一个实例?

编辑:

所以基本的答案是UI元素(文本框,用户控件等)只能有1个父元素。因此,我需要有两个独立的UI元素共享相同的关联数据。得到它(感谢所有人的帮助,为所有人提高选票)

3 个答案:

答案 0 :(得分:1)

我猜测控件的父容器在赋值时得到更新,创建了这种行为(尽管我最初假设也是如此)。

你想做什么?如果你想让两个窗口同步,你可以传递一个字符串变量;使用此值更新每个备用窗口中的文本框。

答案 1 :(得分:1)

而不是尝试在应用程序main中进行处理,而是必须在每个表单事件处理程序中执行此操作。

文本框示例;在Form1 MyTextBox我们Form2 MyTextBox我们的Form1也相同。在这两种形式中,我都有一个事件处理程序,用于文本更改时。如果在Form2.MyTextBox.Text = Form1.MyTextBox.Text;中调用事件处理程序,我设置{{1}}并在Form2的事件处理程序中执行反向操作。

在所有事件处理程序中执行此操作,表单将相互镜像。

答案 2 :(得分:1)

控件有一个Parent属性,用于返回放置它们的容器。因此,每个TextBox都需要拥有自己的一组属性,例如它的大小和位置,因此您的方法无法正常工作。您可以在两个窗口中共享"test"显示的值(在您的案例中为字符串TextBoxes,但不能共享TextBoxes

创建两个文本框!