IT

WPF 수준을 이산 정수 위치에만 맞추는 방법은 무엇입니까?

lottoking 2020. 7. 30. 09:38
반응형

WPF 수준을 이산 정수 위치에만 맞추는 방법은 무엇입니까?


너무나 자주 System.Windows.Forms.TrackBar와 같이 작동하는 WPF 작업을 원합니다. 즉, X에서 Y로 이동하지만 사용자가 이산 정수 위치가 중요합니다.

게재의 가치 속성이 두 배를 의미합니다.


눈금을 올바른 방법으로 설정하면 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가 잠시 중단되는 변환 예외가 발생합니다. 이 문제는 해결을 찾기에 충분하지 않습니다.

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

반응형