WPF의 양호한 수치 UpDown 등가물?
WPF에서 간단한 숫자 업다운(숫자 스피너) 컨트롤을 찾고 있습니다.이것은 WPF의 또 다른 통제력 부족으로 보입니다.분명히 현존하는 것들이 있을 것이고 저는 바퀴를 다시 발명하는 것을 좋아하지 않습니다.
확장 WPF 툴킷에는 Numeric UpDown이 있습니다.
WPF 컨트롤의 원래 세트에는 없지만 많이 사용되는 컨트롤이 NumericUpDown 컨트롤입니다.이것은 사용자가 작은 영역에서 고정된 범위에서 번호를 선택할 수 있도록 하는 깔끔한 방법입니다.슬라이더를 사용할 수도 있지만 수평 리얼 에스테이트가 거의 없는 소형 폼의 경우 숫자 업다운이 필수입니다.
솔루션 A(윈도우즈 FormsHost를 통해)
WPF에서 윈도우즈 Forms NumericUpDown 컨트롤을 윈도우즈 FormsHost에 호스팅하여 사용할 수 있습니다.시스템에 대한 참조를 포함해야 합니다.윈도우.Forms.dll 어셈블리.
<Window x:Class="WpfApplication61.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:wf="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms"
Title="MainWindow" Height="350" Width="525">
<StackPanel>
<WindowsFormsHost>
<wf:NumericUpDown/>
</WindowsFormsHost>
...
솔루션 B(사용자 정의)
여러 상용 버전과 코드플렉스 버전이 있지만 둘 다 프로젝트에 타사 dll 및 오버헤드를 설치해야 합니다.사용자 자신의 것을 구축하는 것이 훨씬 더 간단하며, 이를 위한 간단한 방법은 ScrollBar를 사용하는 것입니다.
엄지손가락이 없는 수직 스크롤 막대(리피터 버튼만 있음)가 바로 우리가 원하는 것입니다.RangeBase에서 상속되므로 Min, Max 및 SmallChange와 같은 필요한 모든 속성을 가지고 있습니다(1로 설정하면 정수 값으로 제한).
스크롤 막대 컨트롤 템플릿을 변경합니다.먼저 엄지 및 수평 트리거 동작을 제거합니다.그런 다음 나머지를 그리드로 그룹화하고 다음 번호에 대한 텍스트 블록을 추가합니다.
<Grid Margin="2">
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition />
</Grid.ColumnDefinitions>
<TextBlock VerticalAlignment="Center" FontSize="20" MinWidth="25" Text="{Binding Value, RelativeSource={RelativeSource TemplatedParent}}"/>
<Grid Grid.Column="1" x:Name="GridRoot" Width="{DynamicResource {x:Static SystemParameters.VerticalScrollBarWidthKey}}" Background="{TemplateBinding Background}">
<Grid.RowDefinitions>
<RowDefinition MaxHeight="18"/>
<RowDefinition Height="0.00001*"/>
<RowDefinition MaxHeight="18"/>
</Grid.RowDefinitions>
<RepeatButton x:Name="DecreaseRepeat" Command="ScrollBar.LineDownCommand" Focusable="False">
<Grid>
<Path x:Name="DecreaseArrow" Stroke="{TemplateBinding Foreground}" StrokeThickness="1" Data="M 0 4 L 8 4 L 4 0 Z"/>
</Grid>
</RepeatButton>
<RepeatButton Grid.Row="2" x:Name="IncreaseRepeat" Command="ScrollBar.LineUpCommand" Focusable="False">
<Grid>
<Path x:Name="IncreaseArrow" Stroke="{TemplateBinding Foreground}" StrokeThickness="1" Data="M 0 0 L 4 4 L 8 0 Z"/>
</Grid>
</RepeatButton>
</Grid>
</Grid>
출처:
상용 솔루션이 괜찮으면 이 컨트롤 세트인 WPF Elements by Mindscape를 고려할 수 있습니다.
이러한 스핀 컨트롤과 다양한 숫자 컨트롤(예: Integer)을 장식할 수 있는 스핀 데코레이터가 포함되어 있습니다.XAML의 TextBox, NumericTextBox 및 컨트롤 세트의 일부)는 다음과 같습니다.
<WpfElements:SpinDecorator>
<WpfElements:IntegerTextBox Text="{Binding Foo}" />
</WpfElements:SpinDecorator>
텍스트 상자 및 스크롤 막대 추가
VB로
Private Sub Textbox1_ValueChanged(ByVal sender As System.Object, ByVal e As System.Windows.RoutedPropertyChangedEventArgs(Of System.Double)) Handles Textbox1.ValueChanged
If e.OldValue > e.NewValue Then
Textbox1.Text = (Textbox1.Text + 1)
Else
Textbox1.Text = (Textbox1.Text - 1)
End If
End Sub
언급URL : https://stackoverflow.com/questions/382676/good-numericupdown-equivalent-in-wpf
'source' 카테고리의 다른 글
ASP.NET 번들최소화 비활성화 방법 (0) | 2023.04.27 |
---|---|
스위프트에서 willSet과 doSet의 목적은 무엇입니까? (0) | 2023.04.27 |
PUT의 Azure BLOB 스토리지 문서에서 "404 리소스를 찾을 수 없음" (0) | 2023.04.27 |
WPF ListView의 헤더를 숨기려면 어떻게 해야 합니까? (0) | 2023.04.27 |
Local cloud stack for Azure similar to LocalStack for AWS? (0) | 2023.04.27 |