当前位置: 首页 > news >正文

WPF 实现自定义弹窗输入功能

1.前端实现

 <Grid><Grid.RowDefinitions><RowDefinition Height="60" /><RowDefinition Height="*" /></Grid.RowDefinitions><BorderGrid.Row="0"BorderBrush="WhiteSmoke"BorderThickness="0.1"><DockPanel Margin="5,0,0,0"><WrapPanelWidth="380"VerticalAlignment="Center"DockPanel.Dock="Right"><Buttonx:Name="Button_OK"Margin="5"Click="Button_OK_Click"Content="OK"Style="{DynamicResource btn-primary}" /><Buttonx:Name="Button_Del"Margin="5"Click="Button_Del_Click"Content="Del"Style="{DynamicResource btn-primary}" /><Buttonx:Name="Button_Clear"Margin="5"Click="Button_Clear_Click"Content="Clear"Style="{DynamicResource btn-primary}" /><Buttonx:Name="Button_Cancel"Margin="5"Click="Button_Cancel_Click"Content="Cancel"Style="{DynamicResource btn-primary}" /><CheckBoxx:Name="CheckBox_Case"Margin="20,5,5,5"Checked="CheckBox_Case_Checked"Content="Case"FontSize="18"Foreground="WhiteSmoke"Style="{DynamicResource CheckBox_BoxStyle}"Unchecked="CheckBox_Case_Unchecked" /></WrapPanel><DockPanel VerticalAlignment="Center"><LabelVerticalContentAlignment="Center"Content="Input:"FontSize="25"Foreground="{DynamicResource Skin-TextColor}" /><TextBoxx:Name="TextBox_Value"Margin="5,0,0,0"FontSize="20"InputMethod.IsInputMethodEnabled="False" /></DockPanel></DockPanel></Border><Border Grid.Row="1"><DockPanel><!--  数字  --><BorderWidth="200"BorderBrush="WhiteSmoke"BorderThickness="1,0.2,0.2,0.2"DockPanel.Dock="Right"><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><!--  字母  --><Border BorderBrush="WhiteSmoke" BorderThickness="0.2,0.2,1,0.2"><Grid x:Name="UniformGrid_Letter"><Grid.RowDefinitions><RowDefinition /><RowDefinition /><RowDefinition /><RowDefinition /></Grid.RowDefinitions><Grid.ColumnDefinitions><ColumnDefinition /><ColumnDefinition /><ColumnDefinition /><ColumnDefinition /><ColumnDefinition /><ColumnDefinition /><ColumnDefinition /></Grid.ColumnDefinitions><!--  abcdefg  --><Buttonx:Name="Button_Letter_1"Grid.Row="0"Grid.Column="0"Click="Button_Letter_Click"Content=""Style="{DynamicResource ButtonSizeAdaptive}" /><Buttonx:Name="Button_Letter_2"Grid.Row="0"Grid.Column="1"Click="Button_Letter_Click"Content=""Style="{DynamicResource ButtonSizeAdaptive}" /><Buttonx:Name="Button_Letter_3"Grid.Row="0"Grid.Column="2"Click="Button_Letter_Click"Content=""Style="{DynamicResource ButtonSizeAdaptive}" /><Buttonx:Name="Button_Letter_4"Grid.Row="0"Grid.Column="3"Click="Button_Letter_Click"Content=""Style="{DynamicResource ButtonSizeAdaptive}" /><Buttonx:Name="Button_Letter_5"Grid.Row="0"Grid.Column="4"Click="Button_Letter_Click"Content=""Style="{DynamicResource ButtonSizeAdaptive}" /><Buttonx:Name="Button_Letter_6"Grid.Row="0"Grid.Column="5"Click="Button_Letter_Click"Content=""Style="{DynamicResource ButtonSizeAdaptive}" /><Buttonx:Name="Button_Letter_7"Grid.Row="0"Grid.Column="6"Click="Button_Letter_Click"Content=""Style="{DynamicResource ButtonSizeAdaptive}" /><!--  hijklmn  --><Buttonx:Name="Button_Letter_8"Grid.Row="1"Grid.Column="0"Click="Button_Letter_Click"Content=""Style="{DynamicResource ButtonSizeAdaptive}" /><Buttonx:Name="Button_Letter_9"Grid.Row="1"Grid.Column="1"Click="Button_Letter_Click"Content=""Style="{DynamicResource ButtonSizeAdaptive}" /><Buttonx:Name="Button_Letter_10"Grid.Row="1"Grid.Column="2"Click="Button_Letter_Click"Content=""Style="{DynamicResource ButtonSizeAdaptive}" /><Buttonx:Name="Button_Letter_11"Grid.Row="1"Grid.Column="3"Click="Button_Letter_Click"Content=""Style="{DynamicResource ButtonSizeAdaptive}" /><Buttonx:Name="Button_Letter_12"Grid.Row="1"Grid.Column="4"Click="Button_Letter_Click"Content=""Style="{DynamicResource ButtonSizeAdaptive}" /><Buttonx:Name="Button_Letter_13"Grid.Row="1"Grid.Column="5"Click="Button_Letter_Click"Content=""Style="{DynamicResource ButtonSizeAdaptive}" /><Buttonx:Name="Button_Letter_14"Grid.Row="1"Grid.Column="6"Click="Button_Letter_Click"Content=""Style="{DynamicResource ButtonSizeAdaptive}" /><!--  opqrstu  --><Buttonx:Name="Button_Letter_15"Grid.Row="2"Grid.Column="0"Click="Button_Letter_Click"Content=""Style="{DynamicResource ButtonSizeAdaptive}" /><Buttonx:Name="Button_Letter_16"Grid.Row="2"Grid.Column="1"Click="Button_Letter_Click"Content=""Style="{DynamicResource ButtonSizeAdaptive}" /><Buttonx:Name="Button_Letter_17"Grid.Row="2"Grid.Column="2"Click="Button_Letter_Click"Content=""Style="{DynamicResource ButtonSizeAdaptive}" /><Buttonx:Name="Button_Letter_18"Grid.Row="2"Grid.Column="3"Click="Button_Letter_Click"Content=""Style="{DynamicResource ButtonSizeAdaptive}" /><Buttonx:Name="Button_Letter_19"Grid.Row="2"Grid.Column="4"Click="Button_Letter_Click"Content=""Style="{DynamicResource ButtonSizeAdaptive}" /><Buttonx:Name="Button_Letter_20"Grid.Row="2"Grid.Column="5"Click="Button_Letter_Click"Content=""Style="{DynamicResource ButtonSizeAdaptive}" /><Buttonx:Name="Button_Letter_21"Grid.Row="2"Grid.Column="6"Click="Button_Letter_Click"Content=""Style="{DynamicResource ButtonSizeAdaptive}" /><!--  vwxyz-@  --><Buttonx:Name="Button_Letter_22"Grid.Row="3"Grid.Column="0"Click="Button_Letter_Click"Content=""Style="{DynamicResource ButtonSizeAdaptive}" /><Buttonx:Name="Button_Letter_23"Grid.Row="3"Grid.Column="1"Click="Button_Letter_Click"Content=""Style="{DynamicResource ButtonSizeAdaptive}" /><Buttonx:Name="Button_Letter_24"Grid.Row="3"Grid.Column="2"Click="Button_Letter_Click"Content=""Style="{DynamicResource ButtonSizeAdaptive}" /><Buttonx:Name="Button_Letter_25"Grid.Row="3"Grid.Column="3"Click="Button_Letter_Click"Content=""Style="{DynamicResource ButtonSizeAdaptive}" /><Buttonx:Name="Button_Letter_26"Grid.Row="3"Grid.Column="4"Click="Button_Letter_Click"Content=""Style="{DynamicResource ButtonSizeAdaptive}" /><Buttonx:Name="Button_Letter_27"Grid.Row="3"Grid.Column="5"Click="Button_Letter_Click"Content="/"Style="{DynamicResource ButtonSizeAdaptive}" /><Buttonx:Name="Button_Letter_28"Grid.Row="3"Grid.Column="6"Click="Button_Letter_Click"Content="@"Style="{DynamicResource ButtonSizeAdaptive}" /></Grid></Border></DockPanel></Border></Grid>

2.后端实现

/// <summary>
/// KeyboardWindow.xaml 的交互逻辑
/// </summary>
public partial class KeyboardWindow : Window
{List<string> letterList = new List<string>();public KeyboardWindow(string value = ""){InitializeComponent();Init(value);}private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e){}/// <summary>/// 初始化/// </summary>private void Init(string value){try{value = value ?? "";TextBox_Value.Text = value;TextBox_Value.SelectionStart = value.Length;TextBox_Value.Focus();string[] ss = new string[26] { "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z" };letterList= ss.ToList();Load();}catch{}}private void Load(bool isCase = false){try{for (int i = 0; i < letterList.Count; i++){string name = string.Format("Button_Letter_{0}", i + 1);Button but = this.UniformGrid_Letter.FindName(name) as Button;if (isCase){but.Content = letterList[i].ToUpper();}else{but.Content = letterList[i].ToLower();}}}catch{}}#region 值输入/// <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 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_Cancel_Click(object sender, RoutedEventArgs e){this.DialogResult = false;this.Close();}/// <summary>/// 确定/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void Button_OK_Click(object sender, RoutedEventArgs e){try{this.DialogResult = true;this.Close();}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;}/// <summary>/// 字母输入/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void Button_Letter_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>/// <param name="sender"></param>/// <param name="e"></param>private void CheckBox_Case_Checked(object sender, RoutedEventArgs e){Load(true);}/// <summary>/// 小写/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void CheckBox_Case_Unchecked(object sender, RoutedEventArgs e){Load(false);}
}

3.自定义Button样式

 <Style x:Key="ButtonSizeAdaptive" TargetType="Button"><Setter Property="VerticalContentAlignment" Value="Center" /><Setter Property="VerticalAlignment" Value="Stretch" /><Setter Property="HorizontalAlignment" Value="Stretch" /><Setter Property="HorizontalContentAlignment" Value="Center" /><Setter Property="Height" Value="Auto" /><Setter Property="Width" Value="Auto" /><Setter Property="FontSize" Value="30" /><Setter Property="FontWeight" Value="Bold" /></Style>

4.效果
在这里插入图片描述

相关文章:

  • 第一章-人工智能概述-深度学习与AI发展(2/36)
  • 星型模式(Star Schema)
  • 代码随想录|图论|05岛屿数量(深搜DFS)
  • 重建与数字子序列匹配的最小数字序列的有效方法
  • element-plus 按钮 展开/隐藏
  • css 颜色与字体
  • Flux.create
  • Mac电脑如何搭建基于java后端的开发的各种工具服务
  • WebSocket 与 HTTP 的区别及 Spring Boot 实战应用
  • FANUC机器人教程:用户坐标系标定及其使用方法
  • Java——注解开发模式下的 Spring IoC/DI 与 Bean 管理实战
  • 机器学习15-规则学习-知识加强
  • 【NLP】自然语言项目设计
  • vllm加载多个Lora部署
  • 数据分享:教育数据集-预测学生辍学风险和学术成功数据集
  • 01【C++ 入门基础】命名空间/域
  • 8、做中学 | 四年级下期 Golang运算符
  • [论文阅读] 人工智能 + 软件工程 | AI 与敏捷开发的破局之路:从挫败到成功的工作坊纪实
  • Git 使用规范与命令使用场景详解
  • 【嵌入式ARM汇编基础】-ELF文件格式内部结构详解(二)