1.前端实现
<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>
<!-- 数字 -->
<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.后端实现
/// <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.效果