1

メインウィンドウと別のウィンドウがあります。私が作成した2番目のウィンドウで new canvas、メインウィンドウからそのプロパティを変更したいのですが、この試行で失敗しました:

これは 2 番目のウィンドウのクラスです。

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を変数として使用できません。どうすればよいですか?

4

2 に答える 2

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また、親コンテナを設定することを忘れないでください。

于 2012-09-16T12:14:29.867 に答える
0

ACanvasは、WPFコントロールに関する限り少し奇妙です。サイズがゼロである可能性が高いため、変更は表示されません。サイズをハードコーディングして、コードが機能しているかどうかを確認してください。window2コンストラクターでこれを行います:

painting.Width = 100;
painting.Height = 100;
于 2012-09-16T11:39:16.133 に答える