간단하게 Wheel이 지원되는 리스트 박스 만드는 방법을 알려드리도록 하죠.^^
먼저 Wheel 을 지원 받을 수 있도록 아래 포스트에 가서 Wheel을 지원할 수 있게 하는 class를 다운 받습니다.
http://cafe.naver.com/mssilverlight/693
아니면 새로 짜도 상관은 없습니다.
그리고 아래와 같은 클래스를 만듭니다.
using System; using System.Windows; using System.Windows.Controls; using HugeFlow.Interface; namespace HugeFlow.Controls { [TemplatePart(Name = WheelListBox.ElementScrollViewerName, Type = typeof(ScrollViewer))] public class WheelListBox : ListBox { #region ScrollOffset ////// Gets or sets the ScrollOffset possible Value of the double object. /// public double ScrollOffset { get { return (double)GetValue(ScrollOffsetProperty); } set { SetValue(ScrollOffsetProperty, value); } } ////// Identifies the ScrollOffset dependency property. /// public static readonly DependencyProperty ScrollOffsetProperty = DependencyProperty.Register( "ScrollOffset", typeof(double), typeof(WheelListBox), null); #endregion ScrollOffset public WheelListBox() : base() { DefaultStyleKey = typeof(ListBox); ScrollOffset = 20; (new MouseWheelHelper(this)).WheelScroll += new EventHandler<MouseWheelEventArgs>(Wheel_Moved); } void Wheel_Moved(object sender, MouseWheelEventArgs e) { e.Handled = true; double tempOffset = ElementScrollViewer.VerticalOffset - ScrollOffset * e.Delta; if (tempOffset < 0) tempOffset = 0; else if (tempOffset > ElementScrollViewer.ScrollableHeight) tempOffset = ElementScrollViewer.ScrollableHeight; ElementScrollViewer.ScrollToVerticalOffset(tempOffset); } /// /// Identifies the optional ScrollViewer element from the template. /// internal ScrollViewer ElementScrollViewer { get; set; } private const string ElementScrollViewerName = "ScrollViewer"; public override void OnApplyTemplate() { base.OnApplyTemplate(); ElementScrollViewer = GetTemplateChild(ElementScrollViewerName) as ScrollViewer; } } }
어째 간단하게 보이실런지..^^ 쉽게 갔다 쓰는 용으로 프로젝트도 하나 만들어 봤습니다. 첨부합니다. 그럼 유용하게 사용하시길.^^
- smile -