文章目录
前言
本文主要讲述如何使用c#中的WPF编程技术实现一个具有简单界面计算器,并且可以进行简单的加减乘除运算。
一、WPF是什么?
WPF是 Windows Presentation Foundation 的英文缩写,意为“窗体呈现基础”,是微软基于.NET Framework 3.0 推出的新一代构建窗体程序的框架。不同于WinForm,WPF实现了界面和开发分离,它的界面是由Xaml语言构建的,这种形式对前端开发人员非常友好,使初步进入WPF页面开发的前端开发人员可以很轻松的上手并开发出绚丽的界面(并且还有一个UI编辑利器:VS Blend来辅助界面的开发)。
二、使用步骤
1.创建一个WPF应用程序
2.在MainWindow.xaml中放置控件
如图所示,可以在工具箱中寻找相应的WPF控件,放置到MainWindow.xaml中即可。
本例中的XAML代码如下:
<Window x:Name="Window1" x:Class="计算器1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:计算器1"
mc:Ignorable="d"
Title="MainWindow" Height="530" Width="580" ResizeMode="NoResize">
<Window.Resources>
<Style x:Key="Mystyle">
<Setter Property="Button.FontSize" Value="20"></Setter>
</Style>
</Window.Resources>
<Grid Margin="0,0,-3,-3">
<Grid.Resources >
<ControlTemplate x:Key="ButtonTemplate" TargetType="{x:Type Button }"><!--模板对象是按钮-->
<Grid >
<Ellipse Name="out" Width=" 50" Height=" 50" Fill="DarkGreen" />
<Ellipse Name="in" Width=" 45" Height=" 45" Fill="MintCream" />
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" />
</Grid >
</ControlTemplate >
</Grid.Resources >
<Grid.ColumnDefinitions>
<ColumnDefinition Width="63*"/>
<ColumnDefinition Width="148*"/>
<ColumnDefinition Width="372*"/>
</Grid.ColumnDefinitions>
<TextBox x:Name="TextBox1" IsReadOnly="True" TextAlignment="Right" Margin="36,32,28,422" RenderTransformOrigin="0.341,0.891" FontSize="25" Grid.Column="2" />
<Button x:Name="btn_C" Content="C" Click="btn_C_Click" HorizontalAlignment="Left" Margin="18,33,0,0" VerticalAlignment="Top" RenderTransformOrigin="1.327,-0.634" Height="51" Width="71" Template="{StaticResource ButtonTemplate}" FontSize="20" Grid.Column="1"/>
<Button x:Name="Button1" Content="1" Click="Button0_Click" Margin="44,55,0,0" VerticalAlignment="Top" RenderTransformOrigin="1.327,-0.634" Height="179" Template="{StaticResource ButtonTemplate}" HorizontalAlignment="Left" Width="71" FontSize="20" Grid.ColumnSpan="2"/>
<Button x:Name="Button2" Content="2" Click="Button0_Click" Margin="117,55,0,0" VerticalAlignment="Top" RenderTransformOrigin="1.327,-0.634" Height="179" Template="{StaticResource ButtonTemplate}" HorizontalAlignment="Left" Width="71" FontSize="20" Grid.Column="1" Grid.ColumnSpan="2"/>
<Button x:Name="Button3" Content="3" Click="Button0_Click" Margin="103,55,0,0" VerticalAlignment="Top" RenderTransformOrigin="1.327,-0.634" Height="179" Template="{StaticResource ButtonTemplate}" HorizontalAlignment="Left" Width="71" FontSize="20" Grid.Column="2" />
<Button x:Name="btn_add" Content="+" Click="btn_add_Click" Margin="237,55,0,0" VerticalAlignment="Top" RenderTransformOrigin="1.327,-0.634" Height="179" Template="{StaticResource ButtonTemplate}" HorizontalAlignment="Left" Width="71" FontSize="20" Grid.Column="2" />
<Button x:Name="Button4" Content="4" Click="Button0_Click" Margin="44,147,0,0" VerticalAlignment="Top" RenderTransformOrigin="1.327,-0.634" Height="179" Template="{StaticResource ButtonTemplate}" HorizontalAlignment="Left" Width="71" FontSize="20" Grid.ColumnSpan="2"/>
<Button x:Name="Button5" Content="5" Click="Button0_Click" Margin="117,147,0,0" VerticalAlignment="Top" RenderTransformOrigin="1.327,-0.634" Height="179" Template="{StaticResource ButtonTemplate}" HorizontalAlignment="Left" Width="71" FontSize="20" Grid.Column="1" Grid.ColumnSpan="2"/>
<Button x:Name="Button6" Content="6" Click="Button0_Click" Margin="103,147,0,0" VerticalAlignment="Top" RenderTransformOrigin="1.327,-0.634" Height="179" Template="{StaticResource ButtonTemplate}" HorizontalAlignment="Left" Width="71" FontSize="20" Grid.Column="2"/>
<Button x:Name="btn_sub" Content="-" Click="btn_add_Click" Margin="237,147,0,0" VerticalAlignment="Top" RenderTransformOrigin="1.327,-0.634" Height="179" Template="{StaticResource ButtonTemplate}" HorizontalAlignment="Left" Width="71" FontSize="20" Grid.Column="2" />
<Button x:Name="Button7" Content="7" Click="Button0_Click" Margin="44,239,0,0" VerticalAlignment="Top" RenderTransformOrigin="1.327,-0.634" Height="179" Template="{StaticResource ButtonTemplate}" HorizontalAlignment="Left" Width="71" FontSize="20" Grid.ColumnSpan="2"/>
<Button x:Name="Button8" Content="8" Click="Button0_Click" Margin="117,239,0,0" VerticalAlignment="Top" RenderTransformOrigin="1.327,-0.634" Height="179" Template="{StaticResource ButtonTemplate}" HorizontalAlignment="Left" Width="71" FontSize="20" Grid.Column="1" Grid.ColumnSpan="2"/>
<Button x:Name="Button9" Content="9" Click="Button0_Click" Margin="103,239,0,0" VerticalAlignment="Top" RenderTransformOrigin="1.327,-0.634" Height="179" Template="{StaticResource ButtonTemplate}" HorizontalAlignment="Left" Width="71" FontSize="20" Grid.Column="2" />
<Button x:Name="btn_mul" Content="*" Click="btn_add_Click" Margin="237,239,0,0" VerticalAlignment="Top" RenderTransformOrigin="1.327,-0.634" Height="179" Template="{StaticResource ButtonTemplate}" HorizontalAlignment="Left" Width="71" FontSize="20" Grid.Column="2"/>
<Button x:Name="Button0" Content="0" Click="Button0_Click" Margin="44,331,0,0" VerticalAlignment="Top" RenderTransformOrigin="1.327,-0.634" Height="179" Template="{StaticResource ButtonTemplate}" HorizontalAlignment="Left" Width="71" FontSize="20" Grid.ColumnSpan="2"/>
<Button x:Name="btn_dot" Content="." Click="btn_dot_Click" Margin="117,331,0,0" VerticalAlignment="Top" RenderTransformOrigin="1.327,-0.634" Height="179" Template="{StaticResource ButtonTemplate}" HorizontalAlignment="Left" Width="71" FontSize="20" Grid.Column="1" Grid.ColumnSpan="2"/>
<Button x:Name="btn_div" Content="/" Click="btn_add_Click" Margin="237,331,0,0" VerticalAlignment="Top" RenderTransformOrigin="1.327,-0.634" Height="179" Template="{StaticResource ButtonTemplate}" HorizontalAlignment="Left" Width="71" FontSize="20" Grid.Column="2"/>
<Button x:Name="btn_equ" Content="=" Click="btn_add_Click" Margin="103,331,0,0" VerticalAlignment="Top" RenderTransformOrigin="1.327,-0.634" Height="179" Template="{StaticResource ButtonTemplate}" HorizontalAlignment="Left" Width="71" FontSize="20" Grid.Column="2"/>
</Grid>
</Window>
3.为相应的button控件Click时间绑定事件响应函数
在图中的Click后面写上其对应的事件响应函数即可,如按钮btn_C的事件响应函数为btn_C_Click.
4.在MianWindow.xaml.cs中编写相应的事件相应函数
如按钮btn_C的事件响应函数btn_C_Click如下:
private void btn_C_Click(object sender, RoutedEventArgs e)//C的事件处理函数
{
TextBox1.Text = "0";
sum = 0;
blnClear = false;
strOper = "+";
}
按钮0~9的事件响应函数Button0_Click如下
private void Button0_Click(object sender, RoutedEventArgs e)//0~9事件处理函数
{
if (blnClear)//若为真,输入下一个加数前应该清楚文本框中的内容
{
TextBox1.Text = "0";
blnClear = false;
}
Button b1 = (Button)sender;
if (TextBox1.Text != "0")//前面已输入的数非0
{
TextBox1.Text += b1.Content;
}
else//如果已输入的数字为0
{
TextBox1.Text = b1.Content.ToString();
}
}
±*/四个按钮事件处理函数如下:
private void btn_add_Click(object sender, RoutedEventArgs e)//+-*/事件处理函数
{
double dbSecond = Convert.ToDouble(TextBox1.Text);
if (!blnClear)
{
switch (strOper)//按上次记录的运算符计算
{
case "+":
sum += dbSecond;
break;
case "-":
sum -= dbSecond;
break;
case "*":
sum *= dbSecond;
break;
case "/":
sum /= dbSecond;
break;
}
}
if (sender == btn_add)
strOper = "+";
if (sender == btn_sub)
strOper = "-";
if (sender == btn_mul)
strOper = "*";
if (sender == btn_div)
strOper = "/";
if (sender == btn_equ)
strOper = "=";
TextBox1.Text = Convert.ToString(sum);
blnClear = true; //输入下个加数前清除前一个加数
}
小数点.按钮的事件响应函数如下:
private void btn_dot_Click(object sender, RoutedEventArgs e)
{
if (blnClear)
{
TextBox1.Text = "0";
blnClear = false;
}
int n = TextBox1.Text.IndexOf(".");
if (n == -1)//如果没有小数点就增加否则不增加
{ TextBox1.Text = TextBox1.Text + "."; }
}//.的事件处理函数
最后给出完整的MainWindow.xaml.cs的代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace 计算器1
{
/// <summary>
/// MainWindow.xaml 的交互逻辑
/// </summary>
public partial class MainWindow : Window
{
private double sum = 0;
private string strOper = "+";
private bool blnClear = false;
public MainWindow()
{
InitializeComponent();
}
private void btn_C_Click(object sender, RoutedEventArgs e)//C的事件处理函数
{
TextBox1.Text = "0";
sum = 0;
blnClear = false;
strOper = "+";
}
private void Button0_Click(object sender, RoutedEventArgs e)//0~9事件处理函数
{
if (blnClear)//若为真,输入下一个加数前应该清楚文本框中的内容
{
TextBox1.Text = "0";
blnClear = false;
}
Button b1 = (Button)sender;
if (TextBox1.Text != "0")//前面已输入的数非0
{
TextBox1.Text += b1.Content;
}
else//如果已输入的数字为0
{
TextBox1.Text = b1.Content.ToString();
}
}
private void btn_add_Click(object sender, RoutedEventArgs e)//+-*/事件处理函数
{
double dbSecond = Convert.ToDouble(TextBox1.Text);
if (!blnClear)
{
switch (strOper)//按上次记录的运算符计算
{
case "+":
sum += dbSecond;
break;
case "-":
sum -= dbSecond;
break;
case "*":
sum *= dbSecond;
break;
case "/":
sum /= dbSecond;
break;
}
}
if (sender == btn_add)
strOper = "+";
if (sender == btn_sub)
strOper = "-";
if (sender == btn_mul)
strOper = "*";
if (sender == btn_div)
strOper = "/";
if (sender == btn_equ)
strOper = "=";
TextBox1.Text = Convert.ToString(sum);
blnClear = true; //输入下个加数前清除前一个加数
}
private void btn_dot_Click(object sender, RoutedEventArgs e)
{
if (blnClear)
{
TextBox1.Text = "0";
blnClear = false;
}
int n = TextBox1.Text.IndexOf(".");
if (n == -1)//如果没有小数点就增加否则不增加
{ TextBox1.Text = TextBox1.Text + "."; }
}//.的事件处理函数
}
}
总结
以上就是本文要分享的内容,本文仅仅简单介绍了使用c#中的WPF编程技术去实现一个具有简易界面的计算器,包含加减乘除功能。