无法从其他窗口更改对象属性

时间:2012-09-16 10:30:21

标签: c# .net wpf

我有主窗口和另一个窗口。在第二个窗口我创建了新的canvas,我想从主窗口更改其属性,我尝试失败了:

这是第二个窗口的类:

public partial class window2 : Window
{
    public Canvas painting = new Canvas();

    public window2()
    {
    }
}

在这里我尝试从主窗口更改其属性:

window2 paint = new window2();

private void button1_Click(object sender, RoutedEventArgs e)
{
    paint.painting.Background = Brushes.Black;
}

当我点击按钮时它什么也没做。

修改

我认为如果我将使用Application.current.properties并存储canvas对象会更好,但我不知道如何使用它,我试过这个:

Application.Current.Properties["p1"] = painting;

现在如何使用我刚刚创建的“p1”变量从主窗口设置属性?我试过p1.background但是我不能用p1作为变量,所以我该怎么做?

2 个答案:

答案 0 :(得分:1)

您的window2构造函数应包含此内容:

this.AddChild(painting);

无论何时创建新控件(如Canvas),都应设置其父容器。

这是我在window2中的代码:

public Canvas painting = new Canvas();

public window2()
{
    this.AddChild(painting);
}

主窗口:

private void button1_Click(object sender, RoutedEventArgs e)
{
    window2 w = new window2();
    w.Show();
    w.painting.Background = Brushes.Black;
}

我相信你说的是你有不确定数量的画布而你想要全部访问它们。我建议你将它们保存在List的画布或HashTable中(需要使用System.Collections命名空间)。另外,不要忘记设置父容器。

答案 1 :(得分:0)

就WPF控制而言,Canvas有点奇怪。它可能没有大小,所以你没有看到变化。尝试对大小进行硬编码以检查代码是否正常工作。在window2构造函数中执行此操作:

painting.Width = 100;
painting.Height = 100;