2014-12-17 3 views
0

ScrollBar에 사용자 작업을 로깅하기 위해 첨부 된 동작으로 작업하고 있습니다.템플릿이 wpf에서로드되었을 때 감지

내 코드 :

내가 템플릿이로드 내가 트랙을 찾을 수 있음을 감지 할 수있는 방법
class ScrollBarLogBehavior : Behavior<ScrollBar> 
{ 
    protected override void OnAttached() 
    { 
     base.OnAttached(); 
     AssociatedObject.Loaded += new RoutedEventHandler(AssociatedObject_Loaded); 
    } 

    void AssociatedObject_Loaded(object sender, RoutedEventArgs e) 
    { 
     ... 
     var track = (Track)AssociatedObject.Template.FindName("PART_Track", AssociatedObject); 
     // ** HERE is the problem: track is null ! ** 
     ... 
    } 

? (나는 AssociatedObject.Template.LoadContent()를 호출 할 때 결과는 요청 된 트랙이 (가) 포함, 그래서 그것은 잘못된 템플릿 또는 명명의 문제 타이밍의 문제 아이오와하지)

답변

0

내가 어떤 좋은 찾지 못했습니다 OnApplyTemplate 방법을 템플릿로드 시점을 감지하는 방법. (물론,로드 이것은 단지 전체 템플릿 후 발생할 수) 스크롤바 FO 이벤트를 스크롤 등록 -

OnAttached (에
  1. 가) :

    그러나, 나는 트랙을 찾을 수있는 방법을 찾았어요

    protected override void OnAttached() { base.OnAttached(); _scrollHandler = 새로운 ScrollEventHandler (AssociatedObject_Scroll); AssociatedObject.AddHandler (ScrollBar.ScrollEvent, _scrollHandler, true); }

  2. 썸 등록을 제거하고 검색 스크롤 이벤트를 처리 "(PART_Track을

    공극 AssociatedObject_Scroll (객체 송신자 ScrollEventArgs E) { VAR 트랙 = (트랙) AssociatedObject.Template.FindName을 "관련 경우 (트랙 == NULL) 반환; AssociatedObject.RemoveHandler (ScrollBar.ScrollEvent, _scrollHandler) // 트랙 ... } 내 일을

-1

재정

public override void OnApplyTemplate() 
    { 
     base.OnApplyTemplate(); 
     var textBox = Template.FindName("PART_Textbox", this) as TextBox; 
    } 
+0

이것은 연결된 동작에 대한 아이디어를 무시합니다. 이 동작을 모든 스타일의 컨트롤에 자동으로 적용하려는 경우 나에게 해당되지 않습니다. – ShayD