2013-02-26 57 views
0

是否可以从受保护的override override void取消订阅事件处理程序?取消订阅来自Protected Override Void的事件处理程序

protected override void OnViewLoaded(object sender, ViewLoadedEventArg e) 
    { 
     base.OnViewLoaded(sender, e); 
     list = VisualTreeUtil.FindFirstInTree<ListView>(Application.Current.MainWindow, "ListView"); 
     ConfigureAndSuperviseInputControls(this.list); 
     ScrollViewer scroll = VisualTreeUtil.FindFirstInTree<ScrollViewer>(this.list); 
     scroll.ScrollChanged+=new ScrollChangedEventHandler(scroll_ScrollChanged);  
    } 

    void scroll_ScrollChanged(object sender, ScrollChangedEventArgs e) 
    { 
     ConfigureAndSuperviseInputControls(this.list); 
     ScrollViewer sb = e.OriginalSource as ScrollViewer; 
     if (sb.ContentVerticalOffset==sb.ScrollableHeight) 
     { 
      scroll.ScrollChanged-=new ScrollChangedEventHandler(scroll_ScrollChanged); 
     } 
    } 

我的问题是,我没有得到访问scroll_ScrollChanged方法中的滚动obejct。

+2

是不是发送到对象的引用,你想? – Andy 2013-02-26 10:13:38

回答

0

此代码未经测试,但你不能简单的铸件发送对象到ScrollViewer中,并从这样的事件退订:

protected override void OnViewLoaded(object sender, ViewLoadedEventArg e) 
    { 
     base.OnViewLoaded(sender, e); 
     list = VisualTreeUtil.FindFirstInTree<ListView>(Application.Current.MainWindow, "ListView"); 
     ConfigureAndSuperviseInputControls(this.list); 
     ScrollViewer scroll = VisualTreeUtil.FindFirstInTree<ScrollViewer>(this.list); 
     scroll.ScrollChanged+=new ScrollChangedEventHandler(scroll_ScrollChanged);  
    } 

    void scroll_ScrollChanged(object sender, ScrollChangedEventArgs e) 
    { 
     ConfigureAndSuperviseInputControls(this.list); 
     ScrollViewer scroll = (ScrollViewer)sender; 
     if (scroll.ContentVerticalOffset==scroll.ScrollableHeight) 
     { 
      scroll.ScrollChanged-=new ScrollChangedEventHandler(scroll_ScrollChanged); 
     } 
    } 
+0

完美!这很好,谢谢 – Bulli 2013-02-26 10:23:22

0

发件人应该是您需要的对象的引用。

protected override void OnViewLoaded(object sender, ViewLoadedEventArg e) 
    { 
     base.OnViewLoaded(sender, e); 
     list = VisualTreeUtil.FindFirstInTree<ListView>(Application.Current.MainWindow, "ListView"); 
     ConfigureAndSuperviseInputControls(this.list); 
     ScrollViewer scroll = VisualTreeUtil.FindFirstInTree<ScrollViewer>(this.list); 
     scroll.ScrollChanged+=new ScrollChangedEventHandler(scroll_ScrollChanged);  
    } 

    void scroll_ScrollChanged(object sender, ScrollChangedEventArgs e) 
    { 
     ConfigureAndSuperviseInputControls(this.list); 
     ScrollViewer sb = sender as ScrollViewer; 
     if (sb.ContentVerticalOffset==sb.ScrollableHeight) 
     { 
      scroll.ScrollChanged-=new ScrollChangedEventHandler(scroll_ScrollChanged); 
     } 
    } 
+0

这似乎花了我太多的时间来写我的答案;) – dasheddot 2013-02-26 10:18:25

+0

发件人作为参考没有任何变化 – Bulli 2013-02-26 10:19:50

+0

断点行“if(sb.ContentVerticalOffset == sb.ScrollableHeight)”,并看看发件人是否有引用ScrollViewer – Andy 2013-02-26 10:23:37

相关问题