[转载]自定义Behavior 实现Listbox自动滚动到选中项

自定义Behavior 实现Listbox自动滚动到选中项

blend为我们提供方便的behavior来扩展我们的控件,写好之后就可以在blend中方便的使用了。

下面是自定义的behavior来实现Listbox自动滚动到选中项

其中this.AssociatedObject为使用该行为的控件。

其中

OnAttached()和OnDetaching()为必须重写的内容,通常可以在OnAttched()里面添加事件处理程序,来达到拓展的目的。

public class AutoScrollBehavior : Behavior<ListBox> 
    { 
        protected override void OnAttached() 
        { 
            base.OnAttached(); 
            this.AssociatedObject.SelectionChanged += new SelectionChangedEventHandler(AssociatedObject_SelectionChanged); 
        } 
        void AssociatedObject_SelectionChanged(object sender, SelectionChangedEventArgs e) 
        { 
            if (sender is ListBox) 
            { 
                ListBox listbox = (sender as ListBox); 
                if (listbox.SelectedItem != null) 
                { 
                    listbox.Dispatcher.BeginInvoke((Action)delegate 
                    { 
                        listbox.UpdateLayout(); 
                        listbox.ScrollIntoView(listbox.SelectedItem); 
                    }); 
                } 
            } 
        } 
        protected override void OnDetaching() 
        { 
            base.OnDetaching(); 
            this.AssociatedObject.SelectionChanged -= 
                new SelectionChangedEventHandler(AssociatedObject_SelectionChanged); 
        } 
    }

 

posted @ 2012-11-02 17:32  火腿骑士  阅读(209)  评论(0编辑  收藏  举报