2013-12-10 3 views
3

WPF 응용 프로그램이 있습니다.정적 메서드에서 WPF 이름 속성에 액세스

x:Name="switchcontrol" 

을 다음과 같이 XAML 중 하나에서 내가 this.switchcontrol 내 질문은 사용 .cs 파일에서 제어/속성에 액세스 할 필요가 이름 속성을 사용하고, 나는

같은 정적 방법으로 컨트롤에 액세스해야
public static getControl() 
{ 
var control = this.switchcontrol;//some thing like that 
} 

어떻게해야합니까?

답변

4

this은 정적 방법으로 액세스 할 수 없습니다. 당신이 창에 전달할 수 (또는 어떤 XAML은 사용하는 구성) 방법에 대한 참조로 - 토니의 방법

public class MyWindow : Window 
{ 

    public static MyWindow Instance { get; private set;} 

    public MyWindow() 
    { 
     InitializeComponent(); 
     // save value 
     Instance = this; 
    } 

    public static getControl() 
    { 
     // use value 
     if (Instance != null) 
      var control = Instance.switchcontrol; 
    } 

    protected override void OnClosed(EventArgs e) 
    { 
     base.OnClosed(e); 
     Instance = null; // remove reference, so GC could collect it, but you need to be sure there is only one instance!! 
    } 

} 
+0

와우. 고마워. 그것은 작동합니다. 호기심을 위해서,이 접근법을 사용하는 데는 단점이 있습니까? –

+0

@anees 네, 하나가 있습니다. 하나 이상의 인스턴스가 있다면 마지막으로 생성 된 윈도우를 제어 할 수 있습니다. 그리고 인스턴스 값을 지워야합니다. 업데이트 된 답변을 참조하십시오. – Tony

+0

하지만 단 하나의 인스턴스 만 만들어야합니다. 따라서 오래된 인스턴스로 진행해야합니까? –

0

어떤 대안을 : 당신은 예를 들어, 정적 속성에 인스턴스에 대한 참조를 저장 시도 할 수 있습니다 예 당신이 윈도우의 여러 가지 파생 된 형식을 전달하는려고하는 경우에, 당신은 또한이 작업을 수행 할 수

public static void GetControl(MainWindow window) 
    { 
     var Control = window.switchcontrol; 
    } 

:

public static void GetControl(Window window) 
    { 
     dynamic SomeTypeOfWindow = window; 
     try 
     { 
      var Control = SomeTypeOfWindow.switchcontrol; 
     } 
     catch (RuntimeBinderException) 
     { 
      // Control Not Found 
     } 
    } 
관련 문제