2012-09-16 4 views
1

주 창과 다른 창이 있습니다.다른 창에서 개체 속성을 변경할 수 없습니다.

이있는 2 윈도우의 클래스 :

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

    public window2() 
    { 
    } 
} 

및 제 2 창에 내가 canvas 새 만든, 그리고 메인 창에서 해당 속성을 변경하려면, 나는이 시도에 실패했습니다 여기에서 주 창에서 해당 속성을 변경하려고합니다.

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을 사용할 수 없으므로 어떻게해야합니까?

답변

0

Canvas은 WPF 컨트롤이 약간 이상합니다. 크기가 0 일 가능성이 높으므로 변경 사항이 표시되지 않습니다. 코드가 작동하는지 확인하려면 크기를 하드 코딩 해보십시오. window2 생성자에서이 작업을 수행 :

painting.Width = 100; 
painting.Height = 100; 
+0

아니요, 다른 모든 속성이 설정되어 있습니다. 불필요하므로 –

1

귀하의 window2 생성자이 포함되어야합니다

this.AddChild(painting); 

을 당신이 부모 컨테이너를 설정해야합니다 새 컨트롤 (같은 Canvas)를 만들 때마다.

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

내가 당신이 말하는 생각하는 것은 당신이 캔버스의 예측할 수 있고 당신이 그들 모두를 액세스 할 것입니다 :

public Canvas painting = new Canvas(); 

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

을 그리고 MainWindow를 :

이 (window 2)이에서 내 코드입니다 . 캔버스 또는 HashTable (System.Collections 네임 스페이스 사용)의 List에 보관하는 것이 좋습니다. 또한 부모 컨테이너를 설정하는 것을 잊지 마십시오.

+0

라고 쓰여서 작성하지 않았습니다. 2) 이미 위에서 설명한 Application.properties로이 작업을 수행 할 수있는 방법이 있습니까? –

+0

왜 그것을 사용하고 싶습니까? 어떤 프레임 워크를 사용합니까? – Sumi

+0

여기에 무슨 일이 일어나고 : 메인 윈도우에서 "새"버튼을 클릭하면 새 창이 열리고 새 윈도우에서 확인을 누르면 메인 윈도우에 이미있는 탭 컨트롤에 새 아이템 탭이 추가됩니다. 새 탭의 내용에 새 그리드를 만들고 새 캔버스를 만들어 그리드에 넣습니다. 이제 기본 창에서 캔버스 속성을 변경해야하지만 캔버스의 한 변수 만 사용할 수 있습니다 (calss에서 그 값환). 그래서 내가 만든 모든 캔버스의 이름을 application.properties를 사용할 수 있을지 생각했습니다. , 그래서 내가 만든 캔버스에서 어떤 캔버스를 선택할 수 있습니다, 나는 chagne 싶어요. –

관련 문제