이산 정수 위치에 WPF 슬라이더 스냅을 어떻게 만들 수 있습니까?

StackOverflow https://stackoverflow.com/questions/173009

  •  05-07-2019
  •  | 
  •  

문제

너무 자주 나는 system.windows.forms.trackbar of Old의 WPF 슬라이더를 원합니다. 즉, X에서 Y로 이동하는 슬라이더를 원하지만 사용자가 이산 정수 위치로 만 움직일 수 있습니다.

슬라이더의 값 속성이 이중이기 때문에 WPF에서 어떻게이를 수행합니까?

도움이 되었습니까?

해결책

스타크 마크를 올바른 방식으로 설정하면 사용할 수 있습니다. issnaptotickenabled. 이것은 나에게 꽤 잘 작동했습니다. 보다 MSDN 자세한 내용은.

다른 팁

간단한 대답은 당신이 issnaptotickenabled 그리고 진드기 주파수 속성. 즉, 진드기에 스냅을 켜고 진드기 주파수를 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에 동시에 int에 바인딩하면 빈 문자열은 UI를 잠시 으르렁 거리는 전환 예외를 발생시킵니다. 이러한 문제는 솔루션을 찾기에 충분히 심각하지 않았습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top