WPF实现简单计算器


前言

本文主要讲述如何使用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编程技术去实现一个具有简易界面的计算器,包含加减乘除功能。

本人水平有限,如有错误之处,恳请批评指正!

  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LWJANDYS

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值