基于WPF實現(xiàn)自定義彈窗輸入功能
功能介紹:
本文主要介紹了如何使用WPF實現(xiàn)自定義彈窗輸入效果,整體采用了Grid和DockPanel混合布局,頂部為輸入控制區(qū),有文本框、四個功能按鈕(OK/Del/Clear/Cancel)和一個大小寫復選框;底部右側為3x4數(shù)字鍵盤布局,包含數(shù)字0-9按鈕。下面我們就來看看具體實現(xiàn)代碼吧
完整代碼如下:
1.前端實現(xiàn)
<Grid> <Grid.RowDefinitions> <RowDefinition Height="60" /> <RowDefinition Height="*" /> </Grid.RowDefinitions> <Border Grid.Row="0" BorderBrush="WhiteSmoke" BorderThickness="0.1"> <DockPanel Margin="5,0,0,0"> <WrapPanel Width="380" VerticalAlignment="Center" DockPanel.Dock="Right"> <Button x:Name="Button_OK" Margin="5" Click="Button_OK_Click" Content="OK" 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_Clear" Margin="5" Click="Button_Clear_Click" Content="Clear" Style="{DynamicResource btn-primary}" /> <Button x:Name="Button_Cancel" Margin="5" Click="Button_Cancel_Click" Content="Cancel" Style="{DynamicResource btn-primary}" /> <CheckBox x: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"> <Label VerticalContentAlignment="Center" Content="Input:" FontSize="25" Foreground="{DynamicResource Skin-TextColor}" /> <TextBox x:Name="TextBox_Value" Margin="5,0,0,0" FontSize="20" InputMethod.IsInputMethodEnabled="False" /> </DockPanel> </DockPanel> </Border> <Border Grid.Row="1"> <DockPanel> <!-- 數(shù)字 --> <Border Width="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> <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> <!-- 字母 --> <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 --> <Button x:Name="Button_Letter_1" Grid.Row="0" Grid.Column="0" Click="Button_Letter_Click" Content="" Style="{DynamicResource ButtonSizeAdaptive}" /> <Button x:Name="Button_Letter_2" Grid.Row="0" Grid.Column="1" Click="Button_Letter_Click" Content="" Style="{DynamicResource ButtonSizeAdaptive}" /> <Button x:Name="Button_Letter_3" Grid.Row="0" Grid.Column="2" Click="Button_Letter_Click" Content="" Style="{DynamicResource ButtonSizeAdaptive}" /> <Button x:Name="Button_Letter_4" Grid.Row="0" Grid.Column="3" Click="Button_Letter_Click" Content="" Style="{DynamicResource ButtonSizeAdaptive}" /> <Button x:Name="Button_Letter_5" Grid.Row="0" Grid.Column="4" Click="Button_Letter_Click" Content="" Style="{DynamicResource ButtonSizeAdaptive}" /> <Button x:Name="Button_Letter_6" Grid.Row="0" Grid.Column="5" Click="Button_Letter_Click" Content="" Style="{DynamicResource ButtonSizeAdaptive}" /> <Button x:Name="Button_Letter_7" Grid.Row="0" Grid.Column="6" Click="Button_Letter_Click" Content="" Style="{DynamicResource ButtonSizeAdaptive}" /> <!-- hijklmn --> <Button x:Name="Button_Letter_8" Grid.Row="1" Grid.Column="0" Click="Button_Letter_Click" Content="" Style="{DynamicResource ButtonSizeAdaptive}" /> <Button x:Name="Button_Letter_9" Grid.Row="1" Grid.Column="1" Click="Button_Letter_Click" Content="" Style="{DynamicResource ButtonSizeAdaptive}" /> <Button x:Name="Button_Letter_10" Grid.Row="1" Grid.Column="2" Click="Button_Letter_Click" Content="" Style="{DynamicResource ButtonSizeAdaptive}" /> <Button x:Name="Button_Letter_11" Grid.Row="1" Grid.Column="3" Click="Button_Letter_Click" Content="" Style="{DynamicResource ButtonSizeAdaptive}" /> <Button x:Name="Button_Letter_12" Grid.Row="1" Grid.Column="4" Click="Button_Letter_Click" Content="" Style="{DynamicResource ButtonSizeAdaptive}" /> <Button x:Name="Button_Letter_13" Grid.Row="1" Grid.Column="5" Click="Button_Letter_Click" Content="" Style="{DynamicResource ButtonSizeAdaptive}" /> <Button x:Name="Button_Letter_14" Grid.Row="1" Grid.Column="6" Click="Button_Letter_Click" Content="" Style="{DynamicResource ButtonSizeAdaptive}" /> <!-- opqrstu --> <Button x:Name="Button_Letter_15" Grid.Row="2" Grid.Column="0" Click="Button_Letter_Click" Content="" Style="{DynamicResource ButtonSizeAdaptive}" /> <Button x:Name="Button_Letter_16" Grid.Row="2" Grid.Column="1" Click="Button_Letter_Click" Content="" Style="{DynamicResource ButtonSizeAdaptive}" /> <Button x:Name="Button_Letter_17" Grid.Row="2" Grid.Column="2" Click="Button_Letter_Click" Content="" Style="{DynamicResource ButtonSizeAdaptive}" /> <Button x:Name="Button_Letter_18" Grid.Row="2" Grid.Column="3" Click="Button_Letter_Click" Content="" Style="{DynamicResource ButtonSizeAdaptive}" /> <Button x:Name="Button_Letter_19" Grid.Row="2" Grid.Column="4" Click="Button_Letter_Click" Content="" Style="{DynamicResource ButtonSizeAdaptive}" /> <Button x:Name="Button_Letter_20" Grid.Row="2" Grid.Column="5" Click="Button_Letter_Click" Content="" Style="{DynamicResource ButtonSizeAdaptive}" /> <Button x:Name="Button_Letter_21" Grid.Row="2" Grid.Column="6" Click="Button_Letter_Click" Content="" Style="{DynamicResource ButtonSizeAdaptive}" /> <!-- vwxyz-@ --> <Button x:Name="Button_Letter_22" Grid.Row="3" Grid.Column="0" Click="Button_Letter_Click" Content="" Style="{DynamicResource ButtonSizeAdaptive}" /> <Button x:Name="Button_Letter_23" Grid.Row="3" Grid.Column="1" Click="Button_Letter_Click" Content="" Style="{DynamicResource ButtonSizeAdaptive}" /> <Button x:Name="Button_Letter_24" Grid.Row="3" Grid.Column="2" Click="Button_Letter_Click" Content="" Style="{DynamicResource ButtonSizeAdaptive}" /> <Button x:Name="Button_Letter_25" Grid.Row="3" Grid.Column="3" Click="Button_Letter_Click" Content="" Style="{DynamicResource ButtonSizeAdaptive}" /> <Button x:Name="Button_Letter_26" Grid.Row="3" Grid.Column="4" Click="Button_Letter_Click" Content="" Style="{DynamicResource ButtonSizeAdaptive}" /> <Button x:Name="Button_Letter_27" Grid.Row="3" Grid.Column="5" Click="Button_Letter_Click" Content="/" Style="{DynamicResource ButtonSizeAdaptive}" /> <Button x:Name="Button_Letter_28" Grid.Row="3" Grid.Column="6" Click="Button_Letter_Click" Content="@" Style="{DynamicResource ButtonSizeAdaptive}" /> </Grid> </Border> </DockPanel> </Border> </Grid>
2.后端實現(xiàn)
/// <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.效果
到此這篇關于基于WPF實現(xiàn)自定義彈窗輸入功能的文章就介紹到這了,更多相關WPF自定義彈窗輸入內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
詳談C# 圖片與byte[]之間以及byte[]與string之間的轉換
下面小編就為大家?guī)硪黄斦凜# 圖片與byte[]之間以及byte[]與string之間的轉換。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-02-02C# Winform截圖指定控件范圍內(nèi)的圖像的流程步驟
工作所需,需要截圖軟件跑出來的界面上的圖表,但是窗口本身是可以縮放的,圖表也是做的可以跟著窗體大小一起縮放,所以就寫了一個函數(shù),用于截圖圖表容器內(nèi)的圖像,文中有函數(shù)源碼供大家參考,需要的朋友可以參考下2024-10-10