2009-10-30 2 views
4

this one과 관련된 질문이 있습니다. StackPanel에 이벤트를 연결하려고하지만 XamlReader를 사용할 때 연결되지 않습니다. ChildItem_Load 메서드를 호출 할 수 없습니다. 누구든지이 일을 할 수있는 방법을 알고 있습니까?생성 된 코드에 이벤트 처리기 연결

이 이벤트 이외의 코드는 정상적으로 작동합니다.

this._listBox.ItemTemplate = (DataTemplate) XamlReader.Load(
        @"<DataTemplate xmlns=""http://schemas.microsoft.com/winfx/2006/xaml/presentation""> 
          <Border> 
           <StackPanel Loaded=""ChildItem_Loaded""> 
            <TextBlock Text=""{Binding " + this._displayMemberPath + @"}"" /> 
           </StackPanel> 
          </Border> 
         </DataTemplate>" 

답변

5

좋아, 나는 '해킹'솔루션의 비트를 파악하지만, 그것을 작동합니다.

DataTemplate을 만들 때 XamlReader에 로컬 네임 스페이스에 대한 지식이 없으므로 StackPanel을 확장하고 Load 이벤트를 "baked-in"했습니다. 그것은 정확히 이상적인 아니지만, 그것을 작동 :

this._listBox.ItemTemplate = (DataTemplate) XamlReader.Load(
    @"<DataTemplate xmlns=""http://schemas.microsoft.com/winfx/2006/xaml/presentation"" 
        xmlns:foo=""clr-namespace:Foo;assembly=Foo""> 
     <Border> 
      <foo:ExtendedStackPanel> 
       <TextBlock Text=""{Binding " + this._displayMemberPath + @"}"" /> 
      </foo:ExtendedStackPanel> 
     </Border> 
    </DataTemplate>" 
    ); 

그리고 확장 한 클래스 :

public class ExtendedStackPanel : StackPanel 
{ 
    public ExtendedStackPanel() : base() 
    { 
     this.Loaded += new RoutedEventHandler(this.ChildItem_Loaded); 
    } 

    private void ChildItem_Loaded(object sender, RoutedEventArgs e) 
    { 
     // Logic here... 
    } 
} 
+0

멋진 대답 - 감사합니다! – edtheprogrammerguy