2010-01-19 6 views
1

앉아서 WPF 앱이 있습니다. (C#) 코드 숨김의 생성자에서 버튼 이벤트 핸들러를 첨부합니다. 문제는 첨부되지 않는다는 것입니다. 하지만 UI 단추를 클릭하여 단추를 첨부하면 단추가 제대로 작동합니다. 또한, 물론 단추의 XAML에 연결하면 작동합니다.WPF : Codebehind의 생성자에있는 이벤트 처리기가 연결되지 않습니다.

그래서 prob가 생성자에 처리기를 연결하는 것으로 보입니다. 그 과정에서 너무 이른 것 같습니다.

App Image

이것은 내가 원하는,하지만 첨부하지 않습니다

public MainWindow() 
{ 
    InitializeComponent(); 

    //... 
    // 
    // TEST RADIO BUTTONS 
    // 
    // THIS HANDLER DOESN'T ATTACH! 
    ui_Test.Click += (object sender, RoutedEventArgs e) => 
    { 
     bool localOnly = Convert.ToBoolean(ui_rdoLocal.IsChecked); 
     bool onlineOnly = Convert.ToBoolean(ui_rdoOnline.IsChecked); 
     bool both = Convert.ToBoolean(ui_rdoBoth.IsChecked); 

     string message = "Local: {1}{0}Online: {2}{0}Both: {3}".Put(nl, localOnly, onlineOnly, both); 
     MessageBox.Show(message); 
    }; 

    //... 
} 

그리고 여기에 버튼 클릭을 통해 위의 코드를 첨부 두 번째 테스트 버튼에 대한 코드입니다. 이 처리기는 XAML에서 설정됩니다. 그런 다음 처리기가 작동하지만 XAML이 아니라 C#으로 처리기를 연결하려고합니다.

<Button Name="ui_Test2" Content="Attach Annonymous Handlers" Margin="30,10" Click="ui_Test2_Click"></Button> 

및 방법 :

/// <summary> 
    /// Attaches control handlers. Will they attach now? YES!! 
    /// </summary> 
    /// <param name="sender"></param> 
    /// <param name="e"></param> 
    private void ui_Test2_Click(object sender, RoutedEventArgs e) 
    { 
     ui_Test.Click += (object sndr, RoutedEventArgs rea) => 
      { 
       bool localOnly = Convert.ToBoolean(ui_rdoLocal.IsChecked); 
       bool onlineOnly = Convert.ToBoolean(ui_rdoOnline.IsChecked); 
       bool both = Convert.ToBoolean(ui_rdoBoth.IsChecked); 

       string message = "Local: {1}{0}Online: {2}{0}Both: {3}".Put(nl, localOnly, onlineOnly, both); 
       MessageBox.Show(message); 
      }; 
    } 

들으 사전에 어떤 도움!

그레그

+0

코드가 멋지게 보이며 초기 단계가 아니기 때문에 (InitializeComponent 이후이므로) 나는 방금 테스트를했고 코드의 단순화 된 버전이 나를 위해 일하고있다. 간소화 된 재현을 시도해 보셨습니까? 클릭 할당에 중단 점을 넣으면 충돌이 발생합니까? 예를 들어 생성자에서 예외가 발생하여 건너 뛸 수 있습니까? – itowlson

+0

처리기를 연결하기 전에 예외가 발생했습니다. 답변을 답장으로 쓰면 빅 틱을 줄 것입니다. :-) – MrGreggles

답변

0

InitializeComponent(); 생성자에서.

+0

고마워요. 실제로 그것은 그 부름 이후입니다. 나는 다른 사람을 위해 명확히하기 위하여 그것을 위에 추가 할 것이다. – MrGreggles

관련 문제