[wpf] WPF 슬라이더를 개별 정수 위치에만 스냅하는 방법은 무엇입니까?

너무 자주 나는 이전의 System.Windows.Forms.TrackBar처럼 작동하는 WPF 슬라이더를 원합니다. 즉, X에서 Y로 이동하지만 사용자가 개별 정수 위치로만 이동할 수있는 슬라이더를 원합니다.

Slider의 Value 속성이 두 배이기 때문에 WPF에서 어떻게해야합니까?



답변

눈금 표시를 올바른 방법으로 설정하면 IsSnapToTickEnabled 를 사용할 수 있습니다 . 이것은 나를 위해 꽤 잘 작동했습니다. 자세한 내용은 MSDN 을 참조하십시오.


답변

간단한 대답은 IsSnapToTickEnabledTickFrequency 속성 을 활용하는 것입니다 . 즉, 틱에 스냅을 켜고 틱 빈도를 1로 설정합니다.

또는 다른 말로 … 틱을 활용하십시오 …하지만 스냅하는 틱을 반드시 표시 할 필요는 없습니다.

다음 xaml 부분을 확인하십시오.

<Slider
    Orientation="Vertical"
    Height="200"
    Minimum="0"
    Maximum="10"
    Value="0"
    IsSnapToTickEnabled="True"
    TickFrequency="1"
/>


답변

특정 위치 로 스냅하려는 경우 다음 Ticks속성 을 사용할 수도 있습니다 .

<Slider Minimum="1" Maximum="500" IsSnapToTickEnabled="True" Ticks="1,100,200,350,500" />


답변

스냅 트릭은 편리하지만 유효한 틱의 하위 집합 만 표시하려는 경우와 같이 제한이 있습니다. 정수에 바인딩하거나 새 값을 반올림하는 두 가지 대안으로 성공했습니다. 다음은 결합 된 예입니다.

public int MyProperty { get; set; }

private void slider1_ValueChanged(object sender,
    RoutedPropertyChangedEventArgs<double> e)
{
    (sender as Slider).Value = Math.Round(e.NewValue, 0);
}

<Slider
    Name="slider1"
    TickPlacement="TopLeft"
    AutoToolTipPlacement="BottomRight"
    ValueChanged="slider1_ValueChanged"
    Value="{Binding MyProperty}"
    Minimum="0" Maximum="100" SmallChange="1" LargeChange="10"
    Ticks="0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100"/>

어느 쪽의 성능이 스냅 트릭과 어떻게 비교되는지는 모르겠지만 아무런 문제가 없었습니다 *.

* 당신이 경우 바인드 텍스트 필드의 유형 슬라이더의 값이 그를 경험하게 될 것입니다, 마우스를 사용하는 경우, 텍스트 필드에 소수점을 표시합니다 모든 동안 한 번. 동시에 int에 바인딩하면 빈 문자열로 인해 변환 예외가 발생하여 UI가 잠시 중단됩니다. 이러한 문제는 내가 해결책을 찾을만큼 심각하지 않았습니다.


답변