当前位置: 首页 > 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.效果
在这里插入图片描述

http://www.lryc.cn/news/575523.html

相关文章:

  • Spring Boot 项目中同时使用 Swagger 和 Javadoc 的完整指南
  • Redis核心知识详解:从全局命令到高级数据结构
  • 数据结构-第二节-堆栈与队列
  • python打卡day56@浙大疏锦行
  • 学习昇腾开发的第9天--在Ubuntu下安装ffmpeg4.2.11
  • php项目部署----------酒店项目
  • Docker数据管理——AI教你学Docker
  • Redis-set集合
  • C++ 第三阶段:语言改进 - 第四节:nullptr vs NULL
  • 基于Spring Boot 构建现代化短视频平台:HBC Video全栈开发实战
  • 《高等数学》(同济大学·第7版)第九章 多元函数微分法及其应用第二节偏导数
  • 信创国产化替代中的开发语言选择分析
  • Java 大视界 -- Java 大数据机器学习模型在卫星通信信号干扰检测与智能抗干扰中的应用(323)
  • uniapp事件onLoad区分大小写
  • JVM调优实战 Day 7:JVM线程分析与死锁排查
  • 《汇编语言:基于X86处理器》第5章 过程(1)
  • DSP学习笔记1
  • ISP Pipeline(4): Anti Aliasing Noise Filter 抗锯齿与降噪滤波器
  • 6月份最新代发考试战报:思科华为HCIP HCSE 考试通过
  • Spring 框架
  • Pytest项目_day03(Postman使用)
  • Servlet继承结构
  • [附源码+数据库+毕业论文]基于Spring+MyBatis+MySQL+Maven+vue实现的考研图书电子商务平台管理系统,推荐!
  • Docker 入门教程(二):Docker 的基本原理
  • Java基础知识(十一)GUI图形用户界面设计
  • iOS App 上架流程工具链解析:开发者视角下的协作实践总结
  • ubuntu 远程桌面 xrdp + frp
  • AI in CSR Writing: Revolutionizing Clinical Trial Reports
  • 专题:2025中国游戏科技发展研究报告|附130+份报告PDF、原数据表汇总下载
  • Linux命令与脚本:高效系统管理的双刃剑