Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法从其他窗口更改对象属性_C#_.net_Wpf - Fatal编程技术网

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

C# 无法从其他窗口更改对象属性,c#,.net,wpf,C#,.net,Wpf,我有主窗口和另一个窗口。在第二个窗口中,我创建了新的画布,我想从主窗口更改其属性,但我尝试失败: 这是第二个窗口的类: public partial class window2 : Window { public Canvas painting = new Canvas(); public window2() { } } 在这里,我尝试从主窗口更改其属性: window2 paint = new window2(); private void button1

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

这是第二个窗口的类:

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并存储画布对象会更好,但我不知道如何使用它,我尝试了以下方法:

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

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

A
Canvas
对于WPF控件来说有点奇怪。它的大小可能为零,因此您没有看到变化。尝试对大小进行编码,以检查代码是否正常工作。在
窗口2
构造函数中执行以下操作:

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

就WPF控件而言,
Canvas
有点奇怪。它的大小可能为零,因此您没有看到变化。尝试对大小进行编码,以检查代码是否正常工作。在
窗口2
构造函数中执行以下操作:

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

您的
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;
}

我相信你说的是,你有一个未定数目的画布,你想访问他们所有。我建议您将它们保存在画布的
列表中或
哈希表中(您需要使用
System.Collections
命名空间)。另外,不要忘记设置父容器。

您的
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;
}

我相信你说的是,你有一个未定数目的画布,你想访问他们所有。我建议您将它们保存在画布的
列表中或
哈希表中(您需要使用
System.Collections
命名空间)。也不要忘记设置父容器。

不,我设置了所有其他属性,我只是没有编写它,因为它是不必要的不,我设置了所有其他属性,我之所以没有写它,是因为它是不必要的1)它不工作2)我有没有办法用上面描述的Application.properties这样做?发生的情况如下:在主窗口中,当我单击“new”按钮时,会打开一个新窗口,当我在新窗口中按ok时,我向已经在主窗口中的tab控件添加新的item tab,在新选项卡的内容中创建新网格,创建新画布并将其放入网格。现在我需要从主窗口更改canvas属性,但是我不能只使用canvas的一个变量(Cals中的变量),所以我想如果我可以使用application.properties来命名我创建的每个画布,那么我可以从我制作的画布中选择哪个画布,我想更改。对于你的第二个upadte,这里也一样,我需要将新窗口与主窗口连接1)它不工作2)是否有任何方法可以使用上面所述的Application.properties执行此操作?发生的情况如下:在主窗口中,当我单击“新建”按钮时,会打开一个新窗口,当我在新窗口中按“确定”时,我向已经在主窗口中的tab控件添加新的item tab,在新选项卡的内容中创建新网格,创建新画布并将其放入网格。现在我需要从主窗口更改canvas属性,但是我不能只使用canvas的一个变量(Cals中的变量),所以我想如果我可以使用application.properties来命名我创建的每个画布,那么我可以从我制作的画布中选择哪个画布,我想更改。对于你的第二个upadte,这里也一样,我需要将新窗口与主窗口连接起来