너무 자주 나는 이전의 System.Windows.Forms.TrackBar처럼 작동하는 WPF 슬라이더를 원합니다. 즉, X에서 Y로 이동하지만 사용자가 개별 정수 위치로만 이동할 수있는 슬라이더를 원합니다.
Slider의 Value 속성이 두 배이기 때문에 WPF에서 어떻게해야합니까?
답변
눈금 표시를 올바른 방법으로 설정하면 IsSnapToTickEnabled 를 사용할 수 있습니다 . 이것은 나를 위해 꽤 잘 작동했습니다. 자세한 내용은 MSDN 을 참조하십시오.
답변
간단한 대답은 IsSnapToTickEnabled 및 TickFrequency 속성 을 활용하는 것입니다 . 즉, 틱에 스냅을 켜고 틱 빈도를 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가 잠시 중단됩니다. 이러한 문제는 내가 해결책을 찾을만큼 심각하지 않았습니다.