반응형
WPF 수준을 이산 정수 위치에만 맞추는 방법은 무엇입니까?
너무나 자주 System.Windows.Forms.TrackBar와 같이 작동하는 WPF 작업을 원합니다. 즉, X에서 Y로 이동하지만 사용자가 이산 정수 위치가 중요합니다.
게재의 가치 속성이 두 배를 의미합니다.
눈금을 올바른 방법으로 설정하면 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가 잠시 중단되는 변환 예외가 발생합니다. 이 문제는 해결을 찾기에 충분하지 않습니다.
반응형
'IT' 카테고리의 다른 글
힘내 무시하고 메이븐 대상 (0) | 2020.07.30 |
---|---|
Eclipse에서 Tomcat 서버의 시간 초과 변경 (0) | 2020.07.30 |
LINQ 문이 'foreach'루프보다 빠릅니까? (0) | 2020.07.30 |
루비-배열이 아닌 경우 변수를 배열로 우아하게 변환 (0) | 2020.07.30 |
Mac OS X에 내장 vim 업데이트 (0) | 2020.07.30 |