我有主窗口和另一个窗口。在第二个窗口我创建了新的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作为变量,所以我该怎么做?
答案 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;