WPF 슬라이더를 개별 정수 위치에만 스냅하려면 어떻게 해야 합니까?
시스템처럼 동작하는 WPF 슬라이더를 원합니다.창문들.Forms.TrackBar는 오래된 것입니다.즉, X에서 Y로 이동하지만 사용자가 개별 정수 위치에서만 이동할 수 있는 슬라이더를 원합니다.
WPF에서는 슬라이더의 Value 속성이 이중으로 되어 있는데 어떻게 해야 합니까?
간단한 답은 IsSnapToTickEnabled 및 TickFrequency 속성을 활용하는 것입니다.즉, 스냅을 틱으로 설정하고 틱 빈도를 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
'programing' 카테고리의 다른 글
작곡가가 phpoffice/phpspreadsheet가 작동하지 않습니다. (0) | 2023.04.15 |
---|---|
WPF의 comboBox에 항목 추가 (0) | 2023.04.15 |
트리거에서 다른 컨트롤의 속성에 바인딩하려면 어떻게 해야 합니까? (0) | 2023.04.15 |
Excel vba를 사용하여 여러 기준 필터링 (0) | 2023.04.15 |
Excel VB에서 현재 셀 가져오기 (0) | 2023.04.15 |