1.前端代码实现
<Grid><Grid.RowDefinitions><RowDefinition Height="100" /><RowDefinition Height="*" /></Grid.RowDefinitions><BorderGrid.Row="0"BorderBrush="WhiteSmoke"BorderThickness="0.1"><DockPanel><WrapPanelMargin="5,10,0,0"VerticalAlignment="Center"DockPanel.Dock="Top"><LabelVerticalContentAlignment="Center"Content="Input:"FontSize="22"Foreground="{DynamicResource Skin-TextColor}" /><TextBoxx:Name="TextBox_Value"Width="200"Margin="5,0,0,0"FontSize="20"PreviewTextInput="TextBox_PreviewTextInput" /></WrapPanel><WrapPanelMargin="10,0,0,0"VerticalAlignment="Center"DockPanel.Dock="Top"><Buttonx:Name="Button_Clear"Margin="5"Click="Button_Clear_Click"Content="Clear"Style="{DynamicResource btn-primary}" /><Buttonx:Name="Button_Del"Margin="5"Click="Button_Del_Click"Content="Del"Style="{DynamicResource btn-primary}" /><Buttonx:Name="Button_Cancel"Margin="5"Click="Button_Cancel_Click"Content="Cancel"Style="{DynamicResource btn-primary}" /><Buttonx:Name="Button_OK"Margin="5"Click="Button_OK_Click"Content="OK"Style="{DynamicResource btn-primary}" /></WrapPanel></DockPanel></Border><BorderGrid.Row="1"BorderBrush="WhiteSmoke"BorderThickness="0.1"><Grid><Grid.RowDefinitions><RowDefinition /><RowDefinition /><RowDefinition /><RowDefinition /></Grid.RowDefinitions><Grid.ColumnDefinitions><ColumnDefinition /><ColumnDefinition /><ColumnDefinition /></Grid.ColumnDefinitions><ButtonGrid.Row="0"Grid.Column="0"Click="Button_Click"Content="7"Style="{DynamicResource ButtonSizeAdaptive}" /><ButtonGrid.Row="0"Grid.Column="1"Click="Button_Click"Content="8"Style="{DynamicResource ButtonSizeAdaptive}" /><ButtonGrid.Row="0"Grid.Column="2"Click="Button_Click"Content="9"Style="{DynamicResource ButtonSizeAdaptive}" /><ButtonGrid.Row="1"Grid.Column="0"Click="Button_Click"Content="4"Style="{DynamicResource ButtonSizeAdaptive}" /><ButtonGrid.Row="1"Grid.Column="1"Click="Button_Click"Content="5"Style="{DynamicResource ButtonSizeAdaptive}" /><ButtonGrid.Row="1"Grid.Column="2"Click="Button_Click"Content="6"Style="{DynamicResource ButtonSizeAdaptive}" /><ButtonGrid.Row="2"Grid.Column="0"Click="Button_Click"Content="1"Style="{DynamicResource ButtonSizeAdaptive}" /><ButtonGrid.Row="2"Grid.Column="1"Click="Button_Click"Content="2"Style="{DynamicResource ButtonSizeAdaptive}" /><ButtonGrid.Row="2"Grid.Column="2"Click="Button_Click"Content="3"Style="{DynamicResource ButtonSizeAdaptive}" /><ButtonGrid.Row="3"Grid.Column="0"Click="Button_Click"Content="0"Style="{DynamicResource ButtonSizeAdaptive}" /><ButtonGrid.Row="3"Grid.Column="1"Click="Button_Click"Content="."Style="{DynamicResource ButtonSizeAdaptive}" /><ButtonGrid.Row="3"Grid.Column="2"Click="Button_Click"Content="-"Style="{DynamicResource ButtonSizeAdaptive}" /></Grid></Border></Grid>
2.后端代码实现
/// <summary>
/// DigitalInputWindow.xaml 的交互逻辑
/// </summary>
public partial class DigitalInputWindow : Window
{public DigitalInputWindow(string value = ""){try{InitializeComponent();TextBox_Value.Text = value;TextBox_Value.SelectionStart = value.Length;TextBox_Value.Focus();}catch{}}private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e){}#region 值输入/// <summary>/// 确定/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void Button_OK_Click(object sender, RoutedEventArgs e){try{if (TextBox_Value.Text.Trim().EndsWith(".")){TextBox_Value.Text = TextBox_Value.Text.Trim().Substring(0, TextBox_Value.Text.Trim().Length - 1);}if (!double.TryParse(TextBox_Value.Text, out double value)){MessageWindow messageWindow = new MessageWindow();messageWindow.Init("Error", "It's not a numerical value");messageWindow.Show();}else{this.DialogResult = true;this.Close();}}catch{}}/// <summary>/// 取消/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void Button_Cancel_Click(object sender, RoutedEventArgs e){this.DialogResult = false;this.Close();}/// <summary>/// 删除/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void Button_Del_Click(object sender, RoutedEventArgs e){try{if (TextBox_Value.Text.Trim().Length > 0){TextBox_Value.Text = TextBox_Value.Text.Substring(0, TextBox_Value.Text.Trim().Length - 1);}}catch{}}/// <summary>/// 清空/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void Button_Clear_Click(object sender, RoutedEventArgs e){TextBox_Value.Text = string.Empty;}/// <summary>/// 限制输入数字/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void TextBox_PreviewTextInput(object sender, TextCompositionEventArgs e){try{Regex re = new Regex("[^0-9.-]+");e.Handled = re.IsMatch(e.Text);}catch{}}#endregion/// <summary>/// 数字输入/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void Button_Click(object sender, RoutedEventArgs e){try{Button but = sender as Button;string value = but.Content.ToString();//TextBox_Value.Text += value;int cursorPos = TextBox_Value.SelectionStart;TextBox_Value.Text = TextBox_Value.Text.Insert(cursorPos, value);TextBox_Value.SelectionStart = cursorPos + value.Length;TextBox_Value.Focus();}catch {}}/// <summary>/// 返回值/// </summary>/// <returns></returns>public string GetValue(){return TextBox_Value.Text;}
}
3.效果