2011-04-24 2 views
1

나는 슬라이더에 한 번의 클릭 만 있었지만 (실제로 모든 끌기) 왜 카운터를 넣었는지, 실제로는 여러 번 증분하는 이유는 무엇입니까?실버 라이트 슬라이더 ValueChanged가 여러 번 트리거되는 이유는 단 한번만 클릭되는 이유는 무엇입니까?

namespace testslider 
{ 
    public partial class MainPage : UserControl 
    { 
     private int counter = 0; 

     public MainPage() 
     { 
      InitializeComponent(); 
     } 

     private void slider1_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e) 
     { 
      counter = counter + 1; 
     } 
    } 
} 

답변

1

우선이 질문은 프로그래밍 문제가 아니라고 생각합니다. 값이 슬라이더 라인에서 여러 번 클릭하여 변경할 수 있습니다하거나 왼쪽/오른쪽 슬라이더 버튼을 끌어 의 :

어쨌든, 슬라이더의 행동에 대해 생각합니다.

그래서 사용자 또는이 경우 버튼을 클릭하고 원하는 위치로 드래그하면 드래그로 인해 발생하는 ValueChanged 이벤트가 여러 번 발생합니다.

+0

물론 드래그하지 않았습니다. – user310291

0

실험을 반복하여 다른 결과를 얻었습니다.

<Grid> 
    <StackPanel> 
     <Slider Minimum="1" Maximum="10" Value="5" ValueChanged="Slider_ValueChanged"/> 
    </StackPanel> 
</Grid> 

이 코드 숨김 :이 마크 업으로 드래그하지 않고 모든 및 클릭에 추가 ValueChanged 이벤트를 생산하고 클릭하지 않고

ValueChanged: 0 => 1 
ValueChanged: 1 => 5 

:

private void Slider_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e) 
    { 
     Debug.WriteLine("ValueChanged: {0} => {1}", e.OldValue, e.NewValue); 
    } 

나는이 디버그 출력을 가지고 . 따라서 두 개의 ValueChanged 이벤트가 표시되지만 시작 중에 발생하며 클릭하는 동안 발생하지는 않습니다. 첫 번째 이벤트는 유효한 범위 내에서 강제 실행되는 값이고 두 번째 이벤트는 XAML에 지정된 로컬 값입니다.

0

에서는 Slider에 대한 템플릿은 엄지 손가락으로 구성되어 있기 때문에 가능성이 있으며, 왼쪽과 오른쪽의 RepeatButton.

을 누를 때 시간 에서 반복적으로 클릭 이벤트를 발생시키는 컨트롤을 나타냅니다 그것이 풀릴 때까지.

이 기능을 사용하지 않으려면 템플릿을 수정하고 RepeatButtons에서 일반 Button으로 변경해야합니다. 샘플이 필요한지 알려주세요.

Expression Blend가없는 경우이 페이지는 Slider을 구성하는 구성 요소를 파악하는 데 도움이됩니다. http://msdn.microsoft.com/en-us/library/ms753256.aspx (참고 : WPF이지만 Silverlight 버전은 비슷합니다.)

관련 문제