programing

WPF 슬라이더를 개별 정수 위치에만 스냅하려면 어떻게 해야 합니까?

css3 2023. 4. 15. 09:13

WPF 슬라이더를 개별 정수 위치에만 스냅하려면 어떻게 해야 합니까?

시스템처럼 동작하는 WPF 슬라이더를 원합니다.창문들.Forms.TrackBar는 오래된 것입니다.즉, X에서 Y로 이동하지만 사용자가 개별 정수 위치에서만 이동할 수 있는 슬라이더를 원합니다.

WPF에서는 슬라이더의 Value 속성이 이중으로 되어 있는데 어떻게 해야 합니까?

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

즉, 진드기를 이용하지만 꼭 스냅하고 있는 진드기를 보여줄 필요는 없습니다.

다음 xaml을 확인하십시오.

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

체크 마크를 올바르게 설정하면 IsSnapToTickEnabled를 사용할 수 있습니다.나한테는 꽤 잘 먹혔어.상세한 것에 대하여는, MSDN 를 참조해 주세요.

특정 위치에 스냅하고 싶은 경우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가 잠시 정지됩니다.이러한 문제는 제가 해결책을 찾을 만큼 심각하지 않습니다.

언급URL : https://stackoverflow.com/questions/173009/how-do-you-make-a-wpf-slider-snap-only-to-discrete-integer-positions