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


114

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

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

답변:


95

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


172

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

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

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

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

1
이 대답은 받아 들여 져야합니다. 매력처럼 작동합니다. 감사합니다
Ashbay 2013 년

감사합니다.
cplotts 2013 년

디자이너의 속성 대화 상자의 공통 섹션 아래에 있지만 적어도 내 컴퓨터에서는 고급 하위 섹션이 축소되어 간과하기가 너무 쉽기 때문에 즉시 표시되지 않았습니다.
amonroejj

46

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

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

10

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

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가 잠시 중단됩니다. 이러한 문제는 내가 해결책을 찾을만큼 심각하지 않았습니다.


그러면 사용자가 슬라이더에 다른 값도 가질 수 있습니까? 아니면 여전히 틱 값을 선택할 수만 있습니까? 좀 이상한 질문 이군요 ... 제가 묻는 내용을 이해 하셨 으면 좋겠습니다.
JLott

1
@JLott : 여전히 Ticks값 (0, 10, 20, ...) 에만 스냅 할 수 있지만 (1, 2, ...) 사이의 모든 값은 유효하며 화살표 키 등으로 선택할 수 있습니다.
mkjeldsen 2013

오 깔끔하다. 난 몰랐어 ... 고마워!
JLott 2013

이것은 IsSnapToTickEnabled속성 이없는 Silverlight에서 작동 합니다.
ΩmegaMan 2015-06-22
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.