본문 바로가기

Silverlight

Wheel 지원 리스트 박스


간단하게 Wheel이 지원되는 리스트 박스 만드는 방법을 알려드리도록 하죠.^^

먼저 Wheel 을 지원 받을 수 있도록 아래 포스트에 가서 Wheel을 지원할 수 있게 하는 class를 다운 받습니다.
http://cafe.naver.com/mssilverlight/693

아니면 새로 짜도 상관은 없습니다.

그리고 아래와 같은 클래스를 만듭니다.
  1. using System;   
  2. using System.Windows;   
  3. using System.Windows.Controls;   
  4. using HugeFlow.Interface;   
  5.   
  6. namespace HugeFlow.Controls   
  7. {   
  8.     [TemplatePart(Name = WheelListBox.ElementScrollViewerName, Type = typeof(ScrollViewer))]   
  9.     public class WheelListBox : ListBox   
  10.     {  
  11.         #region ScrollOffset   
  12.         /// <SUMMARY>    
  13.         /// Gets or sets the ScrollOffset possible Value of the double object.   
  14.         /// </SUMMARY>    
  15.         public double ScrollOffset   
  16.         {   
  17.             get { return (double)GetValue(ScrollOffsetProperty); }   
  18.             set { SetValue(ScrollOffsetProperty, value); }   
  19.         }   
  20.   
  21.         /// <SUMMARY>    
  22.         /// Identifies the ScrollOffset dependency property.   
  23.         /// </SUMMARY>    
  24.         public static readonly DependencyProperty ScrollOffsetProperty =   
  25.                     DependencyProperty.Register(   
  26.                           "ScrollOffset",   
  27.                           typeof(double),   
  28.                           typeof(WheelListBox),   
  29.                           null);  
  30.         #endregion ScrollOffset   
  31.   
  32.         public WheelListBox() : base()   
  33.         {   
  34.             DefaultStyleKey = typeof(ListBox);   
  35.             ScrollOffset = 20;   
  36.             (new MouseWheelHelper(this)).WheelScroll += new EventHandler<MouseWheelEventArgs><MOUSEWHEELEVENTARGS>(Wheel_Moved);   
  37.         }   
  38.   
  39.         void Wheel_Moved(object sender, MouseWheelEventArgs e)   
  40.         {   
  41.             e.Handled = true;   
  42.   
  43.             double tempOffset = ElementScrollViewer.VerticalOffset - ScrollOffset * e.Delta;   
  44.   
  45.             if (tempOffset < 0)   
  46.                 tempOffset = 0;   
  47.             else if (tempOffset > ElementScrollViewer.ScrollableHeight)   
  48.                 tempOffset = ElementScrollViewer.ScrollableHeight;   
  49.   
  50.             ElementScrollViewer.ScrollToVerticalOffset(tempOffset);   
  51.         }   
  52.   
  53.         /// <SUMMARY>    
  54.         /// Identifies the optional ScrollViewer element from the template.   
  55.         /// </SUMMARY>   
  56.         internal ScrollViewer ElementScrollViewer { getset; }   
  57.         private const string ElementScrollViewerName = "ScrollViewer";   
  58.   
  59.         public override void OnApplyTemplate()   
  60.         {   
  61.             base.OnApplyTemplate();   
  62.             ElementScrollViewer = GetTemplateChild(ElementScrollViewerName) as ScrollViewer;   
  63.         }   
  64.     }   
  65. }  
어째 간단하게 보이실런지..^^ 쉽게 갔다 쓰는 용으로 프로젝트도 하나 만들어 봤습니다. 첨부합니다. 그럼 유용하게 사용하시길.^^ - smile -



[출처] error1001.com