WPF 写一个提醒工具软件(完整项目)

昨天整理硬盘时,偶然发现一个很久之前写的小工具,一个提醒工具。

包含定时提醒,间隔提醒功能。

看看效果:

界面看起来也还凑合,还使用了HandyControl,有桌面托盘功能

界面是下面这样的

提醒窗口有两种,分别是这样的:

MainWindow.xaml代码如下:

<Window x:Class="Notify.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:input="clr-namespace:System.Windows.Input;assembly=PresentationCore"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"xmlns:local="clr-namespace:Notify" xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity" mc:Ignorable="d"xmlns:hc="https://handyorg.github.io/handycontrol"WindowStartupLocation="CenterScreen"Title="定时提醒" AllowsTransparency="True"hc:WindowAttach.IgnoreAltF4="True"WindowStyle="None"Background="Transparent"Width="520" Height="270"ShowInTaskbar="False"Icon="./Resources/Tip32.png"><Window.Resources><ResourceDictionary><!--DataGrid样式--><Style TargetType="DataGrid"><!--网格线颜色--><Setter Property="CanUserResizeColumns" Value="false"/><Setter Property="Background" Value="White" /><Setter Property="BorderBrush" Value="Gray" /><Setter Property="BorderThickness" Value="0.6"/><Setter Property="RowHeaderWidth" Value="0"/><Setter Property="HorizontalGridLinesBrush"><Setter.Value><SolidColorBrush Color="LightGray"/></Setter.Value></Setter><Setter Property="VerticalGridLinesBrush"><Setter.Value><SolidColorBrush Color="LightGray"/></Setter.Value></Setter>
</Style><!--标题栏样式--><Style TargetType="DataGridColumnHeader"><Setter Property="SnapsToDevicePixels" Value="True" /><Setter Property="MinHeight" Value="25" /><Setter Property="FontSize" Value="14" /><Setter Property="Cursor" Value="Hand" /><Setter Property="Template"><Setter.Value><ControlTemplate TargetType="DataGridColumnHeader"><Border x:Name="BackgroundBorder" Width="Auto" Background="Gray"><Grid><ContentPresenter  VerticalAlignment="Center" HorizontalAlignment="Left"/><Rectangle Width="1" Fill="LightGray" HorizontalAlignment="Right" /><Rectangle Height="1" Fill="LightGray" VerticalAlignment="Bottom"/></Grid></Border></ControlTemplate></Setter.Value></Setter><Setter Property="Height" Value="25"/>
</Style><!--行样式触发--><!--背景色改变必须先设置cellStyle 因为cellStyle会覆盖rowStyle样式--><Style  TargetType="DataGridRow"><Setter Property="Height" Value="25"/><Style.Triggers><Trigger Property="IsMouseOver" Value="True"><Setter Property="Background" Value="#dddddd"/></Trigger><Trigger Property="IsSelected" Value="True"><Setter Property="Background" Value="#dddddd"/></Trigger></Style.Triggers>
</Style><!--单元格样式触发--><Style TargetType="DataGridCell"><Setter Property="Template"><Setter.Value><ControlTemplate TargetType="DataGridCell"><TextBlock TextAlignment="Left" VerticalAlignment="Center"  ><ContentPresenter /></TextBlock></ControlTemplate></Setter.Value></Setter>
</Style></ResourceDictionary></Window.Resources><Border BorderBrush="Gray" BorderThickness="0.8" Margin="10" Background="White"><Border.Effect><DropShadowEffect BlurRadius="10" ShadowDepth="0" Color="Black" Opacity="0.5"/></Border.Effect><DockPanel><!--Title Bar--><Grid DockPanel.Dock="Top" Background="#2bb25c" Height="30" x:Name="TitleBar"><Grid.ColumnDefinitions><ColumnDefinition Width="30"/><ColumnDefinition Width="auto"/><ColumnDefinition Width="*"/><ColumnDefinition Width="30"/></Grid.ColumnDefinitions><Image Grid.Column="0" RenderOptions.BitmapScalingMode="Fant" Source="./Resources/Tip32.png" Margin="6"/><TextBlock Grid.Column="1" Text="提醒工具" TextAlignment="Center" VerticalAlignment="Center" FontSize="13"/><Border Grid.Column="3"><Border.Style><Style TargetType="Border"><Style.Triggers><Trigger Property="IsMouseOver" Value="True"><Setter Property="Background" Value="#FF6A6A"/></Trigger><Trigger Property="IsMouseOver" Value="False"><Setter Property="Background" Value="Transparent"/></Trigger></Style.Triggers>
</Style></Border.Style><Button Command="{Binding CloseCommand}"><Button.Template><ControlTemplate><Border Background="Transparent"><Image Source="./Resources/Close12.png" RenderOptions.BitmapScalingMode="Fant"  Margin="8"/></Border></ControlTemplate></Button.Template></Button></Border></Grid><StackPanel Margin="15 10 15 10" ><CheckBox IsChecked="{Binding IntervalTipChecked}" HorizontalAlignment="Left" Content="间隔提醒" FontSize="13" Height="20"></CheckBox><StackPanel Orientation="Horizontal" Margin="0 3 0 8" Visibility="{Binding IntervalTipChecked,Converter={local:BooleanToVisiblityConverter}}"><RadioButton IsChecked="{Binding IntervalTime,Mode=TwoWay,Converter={local:RadioButtonToTimeConverter},ConverterParameter=30}" FontSize="14" Margin="18 0 10 0" Content="30分钟" /><RadioButton IsChecked="{Binding IntervalTime,Mode=TwoWay,Converter={local:RadioButtonToTimeConverter},ConverterParameter=60}" FontSize="14" Margin="0 0 10 0" Content="1小时" /><RadioButton IsChecked="{Binding IntervalTime,Mode=TwoWay,Converter={local:RadioButtonToTimeConverter},ConverterParameter=120}" FontSize="14" Margin="0 0 10 0" Content="2小时" /><RadioButton IsChecked="{Binding IntervalTime,Mode=TwoWay,Converter={local:RadioButtonToTimeConverter},ConverterParameter=240}" FontSize="14" Margin="0 0 10 0" Content="4小时" /><CheckBox IsChecked="{Binding IntervalTime,Mode=TwoWay,Converter={local:RadioButtonToTimeConverter},ConverterParameter=0}" FontSize="14" Margin="0 0 10 0" Content="自定义" /><TextBox x:Name="txtMinute" Text="{Binding CustomText,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" GotFocus="CustomTextGotFocus" PreviewTextInput="MinutePreviewTextInput"  input:InputMethod.IsInputMethodEnabled="False" FontSize="14" Width="45"></TextBox><TextBlock FontSize="14" Margin="3 0 0 0" Text="分钟" VerticalAlignment="Center"></TextBlock></StackPanel><TextBlock x:Name="tipText" Text="请输入1到1440的整数" Margin="320 -8 0 -10" Visibility="Collapsed"Foreground="IndianRed" FontSize="12" VerticalAlignment="Center"/><CheckBox IsChecked="{Binding FixedTimeTipChecked}" HorizontalAlignment="Left" Content="定时提醒" FontSize="13" Height="20"></CheckBox><StackPanel Visibility="{Binding FixedTimeTipChecked,Converter={local:BooleanToVisiblityConverter}}"><TextBlock FontSize="14" Margin="18 0 0 0" Text="提醒日期"/><StackPanel Orientation="Horizontal"><CheckBox IsChecked="{Binding FixedTipDays,Converter={local:DayCheckBoxConverter},ConverterParameter=1}" FontSize="14" Margin="18 5 10 0" Content="周一" /><CheckBox IsChecked="{Binding FixedTipDays,Converter={local:DayCheckBoxConverter},ConverterParameter=2}" FontSize="14" Margin="0 5 10 0" Content="周二" /><CheckBox IsChecked="{Binding FixedTipDays,Converter={local:DayCheckBoxConverter},ConverterParameter=4}" FontSize="14" Margin="0 5 10 0" Content="周三" /><CheckBox IsChecked="{Binding FixedTipDays,Converter={local:DayCheckBoxConverter},ConverterParameter=8}" FontSize="14" Margin="0 5 10 0" Content="周四" /><CheckBox IsChecked="{Binding FixedTipDays,Converter={local:DayCheckBoxConverter},ConverterParameter=16}" FontSize="14" Margin="0 5 10 0" Content="周五" /><CheckBox IsChecked="{Binding FixedTipDays,Converter={local:DayCheckBoxConverter},ConverterParameter=32}" FontSize="14" Margin="0 5 10 0" Content="周六" /><CheckBox IsChecked="{Binding FixedTipDays,Converter={local:DayCheckBoxConverter},ConverterParameter=64}" FontSize="14" Margin="0 5 10 0" Content="周日" /></StackPanel><TextBlock FontSize="14" Margin="18 3 0 0" Text="提醒时间"/><DataGrid ItemsSource="{Binding Tips}"LoadingRow="DataGrid_LoadingRow"Height="150"AutoGenerateColumns="False" CanUserAddRows="False" CanUserDeleteRows="False"CanUserResizeRows="False" CanUserResizeColumns="False" CanUserSortColumns="False"SelectionMode="Single" SelectedItem="{Binding SelectedItem}"><i:Interaction.Triggers><i:EventTrigger EventName="MouseDoubleClick"><i:InvokeCommandAction Command="{Binding MouseDoubleClickCommand}"/></i:EventTrigger></i:Interaction.Triggers><DataGrid.ContextMenu ><ContextMenu StaysOpen="True"><MenuItem Command="{Binding AddTipCommand}" Header="添加"/><MenuItem Command="{Binding EditTipCommand}" Header="修改"/><MenuItem Command="{Binding DeleteTipCommand}" Header="删除"/><MenuItem Command="{Binding ClearTipsCommand}" Header="清空"/></ContextMenu></DataGrid.ContextMenu><DataGrid.Columns><DataGridTextColumn IsReadOnly="True" Binding="{Binding Index}" Header="编号" Width="60"/><DataGridTextColumn IsReadOnly="True" Binding="{Binding Time,Converter={local:TimeToHourMinuteConverter}}" Header="时间" Width="100"/><DataGridTextColumn IsReadOnly="True" Binding="{Binding Content}" Header="内容" Width="*"/></DataGrid.Columns></DataGrid></StackPanel><TextBlock FontSize="14" Margin="0 20 0 10" Text="距离下次提醒"/><Border Height="100" HorizontalAlignment="Center" ><TextBlock Text="{Binding LeftTime,Converter={local:LeftTimeToStringConverter}}" FontSize="60" Foreground="#2bb25c" VerticalAlignment="Center"></TextBlock></Border></StackPanel><hc:NotifyIcon Icon="/icon.ico"Text="Notify"Visibility="Visible"><hc:NotifyIcon.ContextMenu><ContextMenu><MenuItem Command="{Binding PushMainWindow2TopCommand}" Header="显示"/><MenuItem Command="hc:ControlCommands.ShutdownApp" Header="退出"/></ContextMenu></hc:NotifyIcon.ContextMenu><hc:Interaction.Triggers><hc:EventTrigger EventName="MouseDoubleClick"><hc:EventToCommand Command="{Binding PushMainWindow2TopCommand}"/></hc:EventTrigger></hc:Interaction.Triggers></hc:NotifyIcon></DockPanel></Border>
</Window>

代码很多,粘不完。

想要完整项目代码的小伙伴扫码关注本公众号后回复:“提醒工具”  获取下载链接。

如果喜欢,点个赞呗~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/301481.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

她只用1个方法,就把英语拿下了!

全世界只有3.14 % 的人关注了数据与算法之美这3招让你未来6个月讲一口流利英语怎么摆脱单词记不住&#xff1f;如何解决听不懂老外讲英语&#xff1f;让老外叹服你口语的唯一方法……请看中国著名口语教学专家写给你的一封信&#xff1a;亲爱的朋友&#xff1a;你好&#xff01…

英语计算机工程师求职信,计算机工程师英文求职信范文

计算机工程师英文求职信范文是由个人简历模板网为你提供的一份个人求职信范文&#xff0c;可直接使用或根据实际情况进行修改。祝您职场顺利&#xff0c;早日找到称心如意的工作&#xff01;Dear Sir or Madam,I am writing to apply for a position as a computer engineer in…

WPF实现环(圆)形菜单

WPF开发者QQ群&#xff1a; 340500857 | 微信群 -> 进入公众号主页 加入组织“ 前言&#xff0c;接着上一篇圆形菜单。”欢迎转发、分享、点赞、在看&#xff0c;谢谢~。 01—效果预览效果预览&#xff08;更多效果请下载源码体验&#xff09;&#xff1a;02—代码如下一、…

win7系统桌面计算机怎么打的开,windows7系统双击计算机打不开怎么解决|win7双击计算机打不开的解决方法...

运行windows7系统的时候双击"计算机"遇到打不开的情况&#xff0c;也不知道怎么回事&#xff0c;尝试用杀毒软件解决也无效。如果要查看磁盘的具体情况&#xff0c;都没办法查看了。针对win7双击"计算机"打不开的问题&#xff0c;下面小编介绍两种解决方法…

每日一笑 | 在俄罗斯人眼里,没有什么是胶带解决不了的

全世界只有3.14 % 的人关注了数据与算法之美&#xff08;图片来源于网络&#xff0c;侵权删&#xff09;

钣金缺口lisp_UG用钣金模块的放样创建天圆地方,还能学钣金展开,必看

上个给大家用“直纹”做了一个天圆地方的圆台模型&#xff0c;今天给大家讲解下UG钣金模块如何使用“放样弯边”做天圆地方管并展开&#xff0c;借用下上次的图纸数据。首先创建天圆地方钣金模型1首先新建模型&#xff0c;点击草图&#xff0c;以XY为草图平面&#xff0c;点击确…

我开发了一款基于web容器的前端项目容器

目前使用比较多的web容器有哪些&#xff1a;Apache php应用大多数用这个Nginx node应用基本都用这个Tomcat java应用基本都用这个IIS .net应用基本用这个 windows服务器才能用 linux的话有宇内大神开发的Jexus前端基本都是node应用&#xff0c;据我了解大体上分2种一种是 最终打…

这些Python骚操作,你值得拥有

全世界只有3.14 % 的人关注了数据与算法之美0x00 世界&#xff0c;你好程序员第一次接触语言或者框架&#xff0c;基本上都有个 Hello World 的例子&#xff0c;这里 Python 直接将它做成了一个包。0x01 Python 哲学Python 执行 import this 时&#xff0c;会打印出 Python 之禅…

晨风机器人突破限制_厉害了!工程建设领域首创!会自动测量、自动调平的测量机器人...

近日中建三局工程技术研究院自主研发的道路工程移动式高精度测量机器人在武汉四环线工程完成20余公里测试应用标志着机器人完成阶段性测试具备工程应用条件道路工程移动式高精度测量机器人是一种集自动行驶、自动调平自动设站、自动测量等功能于一身的机器人系统系首次在道路工…

晕了!这个配置值从哪来的?

如果有同事问你&#xff0c;数据库连接串的值和appsettings.json配的不一样&#xff0c;从哪来的&#xff1f;你能回答的出来吗?配置读取顺序ASP.NET Core 中的配置是使用一个或多个配置提供程序执行的&#xff0c;配置提供程序使用各种配置源从键值对读取配置数据。ASP.NET C…

client中周期性边界_「微评」增加艺术品在投资组合中的比例 推进国家艺术软实力...

艺术品作为一种兼具收藏属性和投资属性的物品&#xff0c;其最初被人们所接受的是其收藏属性。在进入二十一世纪后&#xff0c;其投资属性才逐渐显现。艺术品的双重属性增加了其投资价值&#xff0c;再叠加显著的顺周期性&#xff0c;艺术品能够在经济向好时为投资者提供超额收…

面向.NET开发人员的Dapr——分布式世界

面向.NET开发人员的Dapr——前言The world is distributed分布式世界Just ask any cool kid: Modern, distributed systems are in, and monolithic apps are out!随便问一个酷小子&#xff0c;他们都会说&#xff1a;现代、分布式系统时间已经到来&#xff0c;单体应用已经成为…

豆瓣最高评分8.1!万维钢:读懂这本书,你会比身边人更深的理解这个时代

▲数据汪特别推荐点击上图进入玩酷屋小木用真金白银来给大家送礼物啦&#xff0c;特别感谢这些年一直以来大家对我们的支持&#xff0c;才让我们越做越好。&#xff08;点我参与送礼活动&#xff09;这几年全球各大科技巨头纷纷进入人工智能领域&#xff0c;催生了一大批技术的…

camunda流程定义表无数据_[Python04] 学习snakemake,三步轻松搭建生信流程!

随着学习的不断深入&#xff0c;分析的数据越来越多。你会发现&#xff0c;日常生信分析不过是调用一些相同的函数或者包分析不同的数据&#xff0c;换汤不换药。那么&#xff0c;如何把分析过程流程化&#xff0c;让数据像工厂的流水线一样自动被处理&#xff1f;最简单的法子…

基于centos5.8源码安装nginx之LNMP

LNMP 指的是什么呢&#xff0c;这里可以“望文生义”&#xff0c;其是linux NGINX Mysql PHP的组合。每一种工具的安装都有其特长来吸引我们去使用它&#xff0c;对此就要了解其组合的各个工具的特点&#xff1a;Linux&#xff1a;不用多说&#xff0c;这是我们都熟知的以开…

cheatengine找不到数值_“不会找问题”,只配在底层,最高效的思维方式导图,人生开挂!...

点击右上角【关注】&#xff0c;每天获取企业经营管理秘籍&#xff01;总裁周刊&#xff0c;与您一同成长&#xff01;声明&#xff1a;文章来源于zhang_liangj&#xff0c;不代表高管周刊立场&#xff0c;如有异议&#xff0c;请私信&#xff01;文|张良计现在&#xff0c;我们…

比乐高便宜十倍!4合1电动遥控积木玩法百变

▲数据汪特别推荐点击上图进入玩酷屋小木用真金白银来给大家送礼物啦&#xff0c;特别感谢这些年一直以来大家对我们的支持&#xff0c;才让我们越做越好。&#xff08;点我参与送礼活动&#xff09;前几天与同事在聊天&#xff0c;他说小时候的梦想就是拥有很多很多的玩具。没…

python类库32[多线程同步Lock+RLock+Semaphore+Event]

2019独角兽企业重金招聘Python工程师标准>>> 一 多线程同步 由于CPython的python解释器在单线程模式下执行&#xff0c;所以导致python的多线程在很多的时候并不能很好地发挥多核cpu的资源。大部分情况都推荐使用多进程。 python的多线程的同步与其他语言基本相同…

加个ing是什么意思_take的意思竟然是“要求”?奇奇怪怪的熟词僻义打卡终于来了!...

慢慢来&#xff0c;比较快。只要不喊停&#xff0c;我们就继续。考研人被玩坏了&#xff0c;出题人&#xff1a;只要我不承认&#xff0c;就没有人能阻止我。下面盘点一下出题人的x操作&#xff1a;2020年英语二完形&#xff1a;trying&#xff0c;乍一看是不是和“尝试”有关&…

每日一笑 | 今天是植树节,我想在你心里种点逼树

全世界只有3.14 % 的人关注了数据与算法之美&#xff08;图片来源于网络&#xff0c;侵权删&#xff09;