一、实验目的

  1. 熟悉使用WPF进行界面编程的基本过程;
  2. 掌握WPF布局、控件、事件的使用。

二、实验内容

  1. 运用WPF技术,模仿Windows 10系统中计算机器(Calculator)程序,开发一个类似程序。

本题作为综合练习,可在最后提交。

加分项:

1)计算机器功能的完整性;

2)是否使用了数据绑定、模板、样式等特性;

3)功能上的创新。

源代码

XAML

<Controls:MetroWindow x:Class="Homework19.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:Homework19"xmlns:Controls="clr-namespace:MahApps.Metro.Controls;assembly=MahApps.Metro"mc:Ignorable="d"ResizeMode = "NoResize"Title="计算器" Height="750" Width="1000"><Grid><TextBlock x:Name="Out_2" HorizontalAlignment="Left" Margin="10,55,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Height="33" Width="670" TextAlignment="Right" FontSize="24"><Run/><LineBreak/><Run/></TextBlock><TextBlock x:Name="Out_1" HorizontalAlignment="Left" Margin="10,93,0,0" TextWrapping="Wrap" Text="0" VerticalAlignment="Top" Height="91" Width="670" TextAlignment="Right" FontSize="72" FontFamily="Microsoft YaHei"/><Button x:Name="btnMenu" Content="≡标准" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top" Width="70" Height="40" FontSize="20" Click="Button_Click"><Button.ContextMenu><ContextMenu Name="contextMenu"><MenuItem Header="标准"/><MenuItem Header="科学"/><MenuItem Header="程序员"/><MenuItem Header="日期计算"/></ContextMenu></Button.ContextMenu></Button><Button x:Name="B_MC" Content="MC" HorizontalAlignment="Left" Margin="10,189,0,0" VerticalAlignment="Top" Width="70" Height="40" Click="B_MC_Click"/><Button x:Name="B_MR" Content="MR" HorizontalAlignment="Left" Margin="85,189,0,0" VerticalAlignment="Top" Width="70" Height="40" Click="B_MR_Click"/><Button x:Name="B_M__1" Content="M+" HorizontalAlignment="Left" Margin="160,189,0,0" VerticalAlignment="Top" Width="70" Height="40" Click="B_M__1_Click"/><Button x:Name="B_M__" Content="M-" HorizontalAlignment="Left" Margin="235,189,0,0" VerticalAlignment="Top" Width="70" Height="40" Click="B_M___Click"/><Button x:Name="B_MS" Content="MS" HorizontalAlignment="Left" Margin="310,189,0,0" VerticalAlignment="Top" Width="70" Height="40" Click="B_MS_Click"/><Button x:Name="B_per" Content="%" HorizontalAlignment="Left" Margin="10,236,0,0" VerticalAlignment="Top" Width="130" Height="90" FontSize="24" FontFamily="Microsoft YaHei UI Light" Click="B_per_Click"/><Button x:Name="B_CE" Content="CE" HorizontalAlignment="Left" Margin="145,236,0,0" VerticalAlignment="Top" Width="130" Height="90" FontSize="24" FontFamily="Microsoft YaHei UI Light" Click="B_CE_Click"/><Button x:Name="B_C" Content="C" HorizontalAlignment="Left" Margin="280,236,0,0" VerticalAlignment="Top" Width="130" Height="90" FontSize="24" FontFamily="Microsoft YaHei UI Light" Click="B_C_Click"/><Button x:Name="B_delete" Content="&lt;-" HorizontalAlignment="Left" Margin="415,236,0,0" VerticalAlignment="Top" Width="130" Height="90" FontSize="24" FontFamily="Microsoft YaHei UI Light" Click="B_delete_Click"/><Button Content="÷" HorizontalAlignment="Left" Margin="550,236,0,0" VerticalAlignment="Top" Width="130" Height="90" FontSize="48" FontFamily="Microsoft YaHei UI Light" Click="Button_Click_4"/><Button x:Name="B_radical" Content="√" HorizontalAlignment="Left" Margin="10,331,0,0" VerticalAlignment="Top" Width="130" Height="90" FontSize="36" FontFamily="Microsoft YaHei UI Light" Click="B_radical_Click"/><Button x:Name="B_7" Content="7" HorizontalAlignment="Left" Margin="145,331,0,0" VerticalAlignment="Top" Width="130" Height="90" FontSize="36" Click="B_NUM_Click"/><Button x:Name="B_8" Content="8" HorizontalAlignment="Left" Margin="280,331,0,0" VerticalAlignment="Top" Width="130" Height="90" FontSize="36" Click="B_NUM_Click"/><Button x:Name="B_9" Content="9" HorizontalAlignment="Left" Margin="415,331,0,0" VerticalAlignment="Top" Width="130" Height="90" FontSize="36" Click="B_NUM_Click"/><Button Content="×" HorizontalAlignment="Left" Margin="550,331,0,0" VerticalAlignment="Top" Width="130" Height="90" FontSize="48" FontFamily="Microsoft YaHei UI Light" Click="Button_Click_3"/><Button x:Name="B_sq" Content="x²" HorizontalAlignment="Left" Margin="10,426,0,0" VerticalAlignment="Top" Width="130" Height="90" FontSize="36" FontFamily="Microsoft YaHei UI Light" Click="B_sq_Click"/><Button x:Name="B_4" Content="4" HorizontalAlignment="Left" Margin="145,426,0,0" VerticalAlignment="Top" Width="130" Height="90" FontSize="36" Click="B_NUM_Click"/><Button x:Name="B_5" Content="5" HorizontalAlignment="Left" Margin="280,426,0,0" VerticalAlignment="Top" Width="130" Height="90" FontSize="36" Click="B_NUM_Click"/><Button x:Name="B_6" Content="6" HorizontalAlignment="Left" Margin="415,426,0,0" VerticalAlignment="Top" Width="130" Height="90" FontSize="36" Click="B_NUM_Click"/><Button x:Name="B_sub" Content="-" HorizontalAlignment="Left" Margin="550,426,0,0" VerticalAlignment="Top" Width="130" Height="90" FontSize="48" FontFamily="Microsoft YaHei UI Light" Click="B_sub_Click"/><Button x:Name="B_cu" Content="x³" HorizontalAlignment="Left" Margin="10,521,0,0" VerticalAlignment="Top" Width="130" Height="90" FontSize="36" FontFamily="Microsoft YaHei UI Light" Click="B_cu_Click"/><Button x:Name="B_1" Content="1" HorizontalAlignment="Left" Margin="145,521,0,0" VerticalAlignment="Top" Width="130" Height="90" FontSize="36" Click="B_NUM_Click"/><Button x:Name="B_2" Content="2" HorizontalAlignment="Left" Margin="280,521,0,0" VerticalAlignment="Top" Width="130" Height="90" FontSize="36" Click="B_NUM_Click"/><Button x:Name="B_3" Content="3" HorizontalAlignment="Left" Margin="415,521,0,0" VerticalAlignment="Top" Width="130" Height="90" FontSize="36" Click="B_NUM_Click"/><Button Content="+" HorizontalAlignment="Left" Margin="550,521,0,0" VerticalAlignment="Top" Width="130" Height="90" FontSize="48" FontFamily="Microsoft YaHei UI Light" Click="Button_Click_2"/><Button x:Name="B_reciprocal" Content="1/x" HorizontalAlignment="Left" Margin="10,616,0,0" VerticalAlignment="Top" Width="130" Height="90" FontSize="24" FontFamily="Microsoft YaHei UI Light" Click="B_reciprocal_Click"/><Button x:Name="B_opp" Content="±" HorizontalAlignment="Left" Margin="145,616,0,0" VerticalAlignment="Top" Width="130" Height="90" FontSize="36" FontFamily="Microsoft YaHei UI Light" Click="B_opp_Click"/><Button x:Name="B_0" Content="0" HorizontalAlignment="Left" Margin="280,616,0,0" VerticalAlignment="Top" Width="130" Height="90" FontSize="36" Click="B_NUM_Click"/><Button Content="." HorizontalAlignment="Left" Margin="415,616,0,0" VerticalAlignment="Top" Width="130" Height="90" FontSize="36" FontFamily="Microsoft YaHei UI Light" Click="Button_Click_1"/><Button x:Name="B_eq" Content="=" HorizontalAlignment="Left" Margin="550,616,0,0" VerticalAlignment="Top" Width="130" Height="90" FontSize="36" FontFamily="Microsoft YaHei UI Light" Click="B_eq_Click"/><TabControl Margin="700,0,0,0"><TabItem><TabItem.Header >历史记录</TabItem.Header><StackPanel><TextBlock x:Name="historyText" HorizontalAlignment="Left" >Popup Text c</TextBlock></StackPanel></TabItem><TabItem Header="内存"><!--Bind TextBlock.Text to the TextBox on the first TabItem.--><TextBlock Text="{Binding ElementName=textBox1, Path=Text}"/></TabItem></TabControl><!--<Grid>--><!-- Declare normal view content here --><!--<Border CornerRadius="5" Background="White" BorderBrush="LightGray" BorderThickness="1" Width="200" Height="100" Panel.ZIndex="10"><Border.Effect><DropShadowEffect BlurRadius="10" Direction="270" ShadowDepth="7" Opacity="0.5"/></Border.Effect><TextBlock Text="I'm a fake Popup control" HorizontalAlignment="Center" VerticalAlignment="Center"/></Border></Grid> --></Grid>
</Controls:MetroWindow>

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;
using MahApps.Metro.Controls;
using System.Windows.Controls.Primitives;namespace Homework19
{/// <summary>/// MainWindow.xaml 的交互逻辑/// </summary>public partial class MainWindow : MetroWindow{public MainWindow(){InitializeComponent();B_MC.IsEnabled = false;B_M__1.IsEnabled = false;B_M__.IsEnabled = false;B_MR.IsEnabled = false;}//temp用于临时存储操作数,oper存储最近一次的运算符private double temp, op1, op2, memory, result;private string oper = null;//next用来表示是否要输入新的操作数private bool next;//连续计算时先计算前面的结果private void Aut(){op2 = Convert.ToDouble(Out_1.Text);switch (oper){case "+":result = op1 + op2;break;case "-":result = op1 - op2;break;case "×":result = op1 * op2;break;case "÷":result = op1 / op2;break;default:break;}Out_1.Text = Convert.ToString(result);//Out_2.Text = Convert.ToString(result);}private void Button_Click(object sender, RoutedEventArgs e){//目标this.contextMenu.PlacementTarget = this.btnMenu;//位置this.contextMenu.Placement = PlacementMode.Top;//显示菜单this.contextMenu.IsOpen = true;}private void B_NUM_Click(object sender, RoutedEventArgs e){Button numBtn = sender as Button;string numstr = numBtn.Content.ToString();if (numstr != "0"){if (Out_1.Text == "0" || next){Out_1.Text = numstr;if (next){next = false;}}elseOut_1.Text += numstr;}else{if (Out_1.Text != "0"){Out_1.Text += "0";}if (next){Out_1.Text = "0";next = false;}}}private void B_C_Click(object sender, RoutedEventArgs e){Out_1.Text = "0";Out_2.Text = "";oper = null;}private void B_CE_Click(object sender, RoutedEventArgs e){Out_1.Text = "0";Out_2.Text = "";oper = null;}private void Button_Click_2(object sender, RoutedEventArgs e){Out_2.Text += Out_1.Text + "+";if (oper != null){Aut();}op1 = Convert.ToDouble(Out_1.Text);oper = "+";next = true;}private void B_sub_Click(object sender, RoutedEventArgs e){Out_2.Text += Out_1.Text + "-";if (oper != null){Aut();}op1 = Convert.ToDouble(Out_1.Text);oper = "-";next = true;}private void Button_Click_3(object sender, RoutedEventArgs e){Out_2.Text += Out_1.Text + "×";if (oper != null){Aut();}op1 = Convert.ToDouble(Out_1.Text);oper = "×";next = true;}private void Button_Click_4(object sender, RoutedEventArgs e){Out_2.Text += Out_1.Text + "÷";if (oper != null){Aut();}op1 = Convert.ToDouble(Out_1.Text);oper = "÷";next = true;}private void B_delete_Click(object sender, RoutedEventArgs e){if (!next){if (Out_1.Text.Length == 1){Out_1.Text = "0";}else{Out_1.Text = Out_1.Text.Substring(0, Out_1.Text.Length - 1);}}}private void B_reciprocal_Click(object sender, RoutedEventArgs e){try{temp = Convert.ToDouble(Out_1.Text);temp = 1 / temp;Out_1.Text = Convert.ToString(temp);}catch (Exception ee){Out_1.Text = "除数不能为0";}}private void B_sq_Click(object sender, RoutedEventArgs e){temp = Convert.ToDouble(Out_1.Text);temp = Math.Pow(temp, 2);Out_1.Text = Convert.ToString(temp);}private void B_cu_Click(object sender, RoutedEventArgs e){temp = Convert.ToDouble(Out_1.Text);temp = Math.Pow(temp, 3);Out_1.Text = Convert.ToString(temp);}private void B_radical_Click(object sender, RoutedEventArgs e){temp = Convert.ToDouble(Out_1.Text);temp = Math.Pow(temp, 0.5);Out_1.Text = Convert.ToString(temp);}private void B_per_Click(object sender, RoutedEventArgs e){temp = Convert.ToDouble(Out_1.Text);temp = temp / 100;Out_1.Text = Convert.ToString(temp);}private void B_MR_Click(object sender, RoutedEventArgs e){Out_1.Text = Convert.ToString(memory);}private void B_M__1_Click(object sender, RoutedEventArgs e){memory += Convert.ToDouble(Out_1.Text);}private void B_M___Click(object sender, RoutedEventArgs e){memory -= Convert.ToDouble(Out_1.Text);}private void B_MC_Click(object sender, RoutedEventArgs e){memory = 0;B_MC.IsEnabled = false;B_M__1.IsEnabled = false;B_M__.IsEnabled = false;B_MR.IsEnabled = false;}private void B_MS_Click(object sender, RoutedEventArgs e){memory = Convert.ToDouble(Out_1.Text);B_MC.IsEnabled = true;B_M__1.IsEnabled = true;B_M__.IsEnabled = true;B_MR.IsEnabled = true;}private void B_eq_Click(object sender, RoutedEventArgs e){op2 = Convert.ToDouble(Out_1.Text);switch (oper){case "+":result = op1 + op2;break;case "-":result = op1 - op2;break;case "×":result = op1 * op2;break;case "÷":result = op1 / op2;break;default:break;}oper = null;Out_1.Text = Convert.ToString(result);Out_2.Text = "";}private void B_opp_Click(object sender, RoutedEventArgs e){temp = Convert.ToDouble(Out_1.Text);if (temp != 0){temp = 0 - temp;}Out_1.Text = Convert.ToString(temp);}private void Button_Click_1(object sender, RoutedEventArgs e){Out_1.Text += ".";}}
}

运行结果

三、实验心得与体会

  1. 熟悉使用WPF进行界面编程的基本过程;
  2. 掌握WPF布局、控件、事件的使用。
  3. 熟悉使用数据绑定、模板、样式等特性;

源代码

Windows 10 计算器 C++源代码

https://github.com/Microsoft/calculator

仿Windows 10 计算器 C#源代码

https://github.com/BuXianShan/Calculator

参考文章

https://blog.csdn.net/qq_43479622/article/details/91599602

https://blog.csdn.net/OneWord233/article/details/80755284

https://www.cnblogs.com/lonelyxmas/p/12117453.html

https://blog.csdn.net/weixin_42009898/article/details/80921151

https://www.cnblogs.com/ouyangkai/p/12759466.html

C#——《C#语言程序设计》实验报告——Windows桌面编程——简单的计算器(仿Windows 10计算器)相关推荐

  1. c语言程序设计数组实验报告,(C语言程序设计实验报告数组.doc

    (C语言程序设计实验报告数组 <C语言程序设计 >课程实验报告 实验名称 学 号_ 姓 名 ___ 班 别 实验日期: 年月日 实验报告日期: 年月日 指导老师: 实验地点: 成 绩: 评 ...

  2. c语言程序设计实验报告2,C语言程序设计实验报告2.docx

    C语言程序设计实验报告2.docx 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文档,不会出现我们的网址水印. 3.该 ...

  3. c 语言差错编码实验结果,C语言程序设计实验报告(四).doc11111111111111111.doc

    C语言程序设计实验报告(四).doc11111111111111111 C语言程序设计实验报告 姓 名吴文重学 号52系 别数学系班级2班主讲教师徐时芳指导教师徐时芳实验日期2011-11-8专业10 ...

  4. c语言选择循环实验报告,C语言程序设计实验报告选择与循环结构程序设计.doc

    C语言程序设计实验报告选择与循环结构程序设计.doc 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文档,不会出现我们的 ...

  5. c语言的简单程序设计实验报告,工程学院C语言程序设计实验报告

    <工程学院C语言程序设计实验报告>由会员分享,可在线阅读,更多相关<工程学院C语言程序设计实验报告(5页珍藏版)>请在人人文库网上搜索. 1.南京工程学院实验报告课程名称C 语 ...

  6. c语言程序设计植树,C语言程序设计实验报告——实验

    C语言程序设计实验报告--实验 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文档,不会出现我们的网址水印. 3.该文档 ...

  7. c语言程序设计数组实验报告,c语言程序设计实验报告(数组).doc

    c语言程序设计实验报告(数组).doc 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文档,不会出现我们的网址水印. 3 ...

  8. c语言指针部分上机,北科大C语言程序设计实验报告8-指针-练习题代码(2次上机课内容)--...

    北科大C语言程序设计实验报告8-指针-练习题代码(2次上机课内容)-- 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文 ...

  9. c语言程序设计的实验报告,C语言程序设计实验报告

    以下为<C语言程序设计实验报告>的无排版文字预览,完整格式请下载 下载前请仔细阅读文字预览以及下方图片预览.图片预览是什么样的,下载的文档就是什么样的. 湖南科技大学 2019-2020第 ...

  10. c语言程序设计实验8,c语言程序设计实验报告8_c语言实验报告格式及实验内容_c语言设计报告...

    实验名称 计算出1000以内10个最大素数之和 实验目的 1.熟练掌握if.if-else.if-else if语句和witch语句格式及使用方法,掌握if语句中的嵌套关系和匹配原则,利用if语句和s ...

最新文章

  1. pycharm 黄色(黄字)高亮警告 Default argument value is mutable 原因及解决办法(mutable 可变对象与 immutable不可变对象)
  2. tomcat日志格式中的含义
  3. 2018年第九届蓝桥杯C/C++ C组国赛 —— 第一题:年龄问题
  4. ajax表格内容加按钮,单击按钮时,如何触发jquery数据表fnServerData通过AJAX更新表?...
  5. JAVA多态(向上转型)与RTTI向下转型
  6. bat递归查找指定文件_批处理脚本遍历指定文件夹下的文件
  7. JS几种数组遍历方式以及性能分析对比
  8. java中的集合_Java 集合介绍,常用集合类
  9. antd upload手动上传_SpringBoot 如何上传大文件?
  10. 九爷 带你了解 Memcache工作原理总结
  11. C# WPF DataGrid在Grid中自适应窗体大小
  12. Python学习-4天--字典的操作
  13. 联想g510升级换什么cpu好_联想G510笔记本完全拆机指南(图解)
  14. hbase 0.98.1集群安装
  15. JNI HelloWorld 亲测可以。
  16. 回顾《网易数据基础平台建设》
  17. System.Data.SqlClient.SqlError: 备份集中的数据库备份与现有的 '***' 数据库不同。 (Microsoft.SqlServer.Smo)
  18. iOS10、11自定义左滑菜单项背景图片
  19. rust纯黑_《黑色沙漠》极致颜艺 黑丝美腿蠢萌搞怪任你捏
  20. java mail 端口号_使用Javamail连接到Gmail smtp服务器将忽略指定的端口并尝试使用25...

热门文章

  1. ajax burp 乱码,burp suite中国乱码的解决方案
  2. java网络编程udp_Java网络编程之UDP
  3. php8正式版发布,PHP 8.0 正式版发布,性能提升 10%
  4. html5图像不停旋转,html5 canvas多个图像旋转
  5. HBuilder X格式化美化代码快捷键
  6. mysql如何创建非管理员权限_mysql权限管理,一个非db管理员创建mysql的做法_MySQL...
  7. python格式化代码工具_python 代码格式化工具:YAPF
  8. 深度学习和目标检测系列教程 6-300:目标检测Fast-RCNN架构
  9. 三十、Pyspider爬虫框架总结,爬取Scrapy文档
  10. 如何在pycharm添加扩张工具