1.前端代码实现
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="100" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Border
Grid.Row="0"
BorderBrush="WhiteSmoke"
BorderThickness="0.1">
<DockPanel>
<WrapPanel
Margin="5,10,0,0"
VerticalAlignment="Center"
DockPanel.Dock="Top">
<Label
VerticalContentAlignment="Center"
Content="Input:"
FontSize="22"
Foreground="{DynamicResource Skin-TextColor}" />
<TextBox
x:Name="TextBox_Value"
Width="200"
Margin="5,0,0,0"
FontSize="20"
PreviewTextInput="TextBox_PreviewTextInput" />
</WrapPanel>
<WrapPanel
Margin="10,0,0,0"
VerticalAlignment="Center"
DockPanel.Dock="Top">
<Button
x:Name="Button_Clear"
Margin="5"
Click="Button_Clear_Click"
Content="Clear"
Style="{DynamicResource btn-primary}" />
<Button
x:Name="Button_Del"
Margin="5"
Click="Button_Del_Click"
Content="Del"
Style="{DynamicResource btn-primary}" />
<Button
x:Name="Button_Cancel"
Margin="5"
Click="Button_Cancel_Click"
Content="Cancel"
Style="{DynamicResource btn-primary}" />
<Button
x:Name="Button_OK"
Margin="5"
Click="Button_OK_Click"
Content="OK"
Style="{DynamicResource btn-primary}" />
</WrapPanel>
</DockPanel>
</Border>
<Border
Grid.Row="1"
BorderBrush="WhiteSmoke"
BorderThickness="0.1">
<Grid>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Button
Grid.Row="0"
Grid.Column="0"
Click="Button_Click"
Content="7"
Style="{DynamicResource ButtonSizeAdaptive}" />
<Button
Grid.Row="0"
Grid.Column="1"
Click="Button_Click"
Content="8"
Style="{DynamicResource ButtonSizeAdaptive}" />
<Button
Grid.Row="0"
Grid.Column="2"
Click="Button_Click"
Content="9"
Style="{DynamicResource ButtonSizeAdaptive}" />
<Button
Grid.Row="1"
Grid.Column="0"
Click="Button_Click"
Content="4"
Style="{DynamicResource ButtonSizeAdaptive}" />
<Button
Grid.Row="1"
Grid.Column="1"
Click="Button_Click"
Content="5"
Style="{DynamicResource ButtonSizeAdaptive}" />
<Button
Grid.Row="1"
Grid.Column="2"
Click="Button_Click"
Content="6"
Style="{DynamicResource ButtonSizeAdaptive}" />
<Button
Grid.Row="2"
Grid.Column="0"
Click="Button_Click"
Content="1"
Style="{DynamicResource ButtonSizeAdaptive}" />
<Button
Grid.Row="2"
Grid.Column="1"
Click="Button_Click"
Content="2"
Style="{DynamicResource ButtonSizeAdaptive}" />
<Button
Grid.Row="2"
Grid.Column="2"
Click="Button_Click"
Content="3"
Style="{DynamicResource ButtonSizeAdaptive}" />
<Button
Grid.Row="3"
Grid.Column="0"
Click="Button_Click"
Content="0"
Style="{DynamicResource ButtonSizeAdaptive}" />
<Button
Grid.Row="3"
Grid.Column="1"
Click="Button_Click"
Content="."
Style="{DynamicResource ButtonSizeAdaptive}" />
<Button
Grid.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.效果