基于WPF編寫有趣的久坐提醒桌面小程序
久坐提醒桌面小程序: 干這行職業(yè)病比較多,之前用愛麗(即:玻璃酸鈉滴眼液),用的時候挺舒服,緩解吧,不過治標(biāo)不治本。注意休息,加強鍛煉非常有必要,這周開始每工作1小時,休息10分鐘(程序中有鎖鍵盤鼠標(biāo)的功能,那個太狠了,萬一領(lǐng)導(dǎo)要東西電腦鎖住了尷尬了,被我注釋了),看看遠(yuǎn)方,綠值,站個樁,或者高架馬步,馬步扎得好,到老疾病少,不過注意別把膝蓋搞壞了,我玩得狠現(xiàn)在有積液了
依賴庫
- .Net Framework 4.5
- HandyControl 3.2
網(wǎng)上下的一些小程序,達不到自己想要的效果,要么就是功能復(fù)雜,于是選擇了自己開發(fā)。
采用WPF 基于HandyControl 開發(fā)的小程序。
- 有2年不寫WPF開發(fā)了,練練手
- 平時工作一坐就是半天,眼睛不怎么好了,干眼嚴(yán)重
說明
設(shè)置提醒時間,及休息時間
默認(rèn)50分鐘休息10分鐘,按整點算(強迫癥),如果工作不足10分鐘,則將時間加到下一輪中。
取消整點勾選,從開始時計劃
久坐提醒倒計時
開始后右下角有小球球,顯示倒計時,像360那樣的窗口懸停不知道怎么做,沒繼續(xù)研究
休息提醒倒計時
距休息10秒時,窗體會顯示到最上層,同時字體顏色變?yōu)辄S色
休息到計時
從網(wǎng)上找的護眼圖片,可以照著練練,再起來走一走。
代碼說明
設(shè)置界面、倒計時、休息界面,三個頁面,通過 VmReminder 進行數(shù)據(jù)共享
主窗體設(shè)置
這是基本框架,參考Office設(shè)計,右上解可擴展【設(shè)置】、【幫助】功能,可用于其它項目
設(shè)置工作時長、休息時長,默認(rèn)從整點開始計時(有強迫癥)
MainWindow.xaml
private void BtnStart_OnClick(object sender, RoutedEventArgs e) { _vm.IsHourly = chkHourly.IsChecked.HasValue && chkHourly.IsChecked.Value; _vm.WorkValue = (int)numWork.Value; _vm.BreakValue = (int)numBreak.Value; //開始后,調(diào)用倒計時窗體,并將倒計時窗體設(shè)為主窗體,否則點拖盤圖標(biāo),會彈出設(shè)置窗體 CountDown countDown = new CountDown(); countDown.DataContext = this._vm; countDown.InitData(); Application.Current.MainWindow = countDown; countDown.Show(); this.Close(); }
工作到計時
窗口倒計時時,顯示在窗口右下角,
CountDown.xml
托盤圖標(biāo)--放在這個窗體下的原因,是因為 休息轉(zhuǎn)工作時,避免托盤下會出現(xiàn)多個圖標(biāo)
<hc:NotifyIcon x:Name="NotifyIcon" Click="NotifyIconContextContent_OnClick" Text="久坐提醒" Visibility="Visible" Icon="/Application.ico"> <hc:NotifyIcon.ContextMenu> <ContextMenu> <MenuItem Click="Settings_OnClick" Header="設(shè)置"/> <MenuItem Click="Exit_OnClick" Header="退出"/> </ContextMenu> </hc:NotifyIcon.ContextMenu> <hc:Interaction.Triggers> <hc:EventTrigger EventName="Click"> <!--<hc:EventToCommand Command="hc:ControlCommands.PushMainWindow2Top"/>--> </hc:EventTrigger> </hc:Interaction.Triggers> </hc:NotifyIcon>
WPF StringFormat="{}{0:0#}:{1:0#}" 顯示倒計時,格式化,如果個位數(shù)時,前面補0
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center" > <TextBlock HorizontalAlignment="Center" Margin="5" Style="{StaticResource TextBlockLargeBold}" Foreground="White"> <TextBlock.Text> <MultiBinding StringFormat="{}{0:0#}:{1:0#}"> <Binding Path="CountDownWorkMinute" /> <Binding Path="CountDownWorkSecond" /> </MultiBinding> </TextBlock.Text> </TextBlock> </StackPanel>
/// <summary> /// 窗口顯示在右下角 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void CountDown_Loaded(object sender, System.Windows.RoutedEventArgs e) { var desktopWorkingArea = System.Windows.SystemParameters.WorkArea; this.Left = desktopWorkingArea.Right - this.Width; this.Top = desktopWorkingArea.Bottom - this.Height; }
通過定時器,工作實現(xiàn)倒計時功能
private void Timer_OnTick(object sender, EventArgs e) { Remind(); //倒計時時結(jié)束,彈出休息窗口 if (_vm.CountDownWorkMinute == 0 && _vm.CountDownWorkSecond == 0) { _timer.Stop(); NotifyIcon.Visibility = Visibility.Hidden; WorkBreak workBreak = new WorkBreak(); Application.Current.MainWindow = workBreak; workBreak.DataContext = this._vm; workBreak.InitData(); workBreak.ShowDialog(); this.Close(); return; } //如果分鐘大于0,秒=0,那分-1,秒>0 秒-1 if (_vm.CountDownWorkMinute > 0) { if (_vm.CountDownWorkSecond > 0) { _vm.CountDownWorkSecond--; } else { _vm.CountDownWorkMinute--; _vm.CountDownWorkSecond = 60; } } if (_vm.CountDownWorkMinute == 0) { _vm.CountDownWorkSecond--; } }
休息倒計時
休息窗體顯示兩護眼張圖片和一個休息到計時,按ESC時可取消本次休息,
WorkBreak.xaml
<base:BaseWindow x:Class="VipReminder.Views.WorkBreak" 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:base="clr-namespace:Base.Base" mc:Ignorable="d" KeyDown="WorkBreak_OnKeyDown" Title="WorkBreak" Height="450" Width="800"> <DockPanel Background="#00a54f"> <DockPanel Dock="Bottom" > <TextBlock HorizontalAlignment="Center" Margin="5" Style="{StaticResource TextBlockLargeBold}" Foreground="White"> <TextBlock.Text> <MultiBinding StringFormat="{}{0:0#}:{1:0#}"> <Binding Path="CountDownBreakMinute" /> <Binding Path="CountDownBreakSecond" /> </MultiBinding> </TextBlock.Text> </TextBlock> </DockPanel> <DockPanel Dock="Left"> <Image Source="/Styles/Images/001.jpg"/> </DockPanel> <DockPanel Dock="Right"> <Image Source="/Styles/Images/002.jpg"/> </DockPanel> </DockPanel> </base:BaseWindow>
WorkBreak.xaml.cs
namespace VipReminder.Views { /// <summary> /// WorkBreak.xaml 的交互邏輯 /// </summary> public partial class WorkBreak { // 定時器 private DispatcherTimer _timer; public VmReminder _vm; public WorkBreak() { InitializeComponent(); WindowState = WindowState.Maximized; //全屏顯示 ShowInTaskbar = false; //任務(wù)欄不顯示圖標(biāo) Topmost = true; //窗體最前端顯示 //this.countDown = countDown; == TODO CountDown 單例 } private void WorkBreak_OnKeyDown(object sender, KeyEventArgs e) { if (e.Key == Key.Escape)//Esc鍵 { OpenCountDown(); } } private void OpenCountDown() { CountDown countDown = new CountDown(); Application.Current.MainWindow = countDown; countDown.DataContext = this._vm; countDown.InitData(); countDown.Show(); _timer.Stop(); this.Close(); } public void InitData() { _vm = DataContext as VmReminder; this.ShowInTaskbar = false; //任務(wù)欄不顯示圖標(biāo) _vm.CountDownBreakMinute = _vm.BreakValue; _vm.CountDownBreakSecond = 0; _timer = new DispatcherTimer(); _timer.Tick += Timer_OnTick; _timer.Interval = TimeSpan.FromSeconds(1); _timer.Start(); //KeyboardBlocker.off();//鎖鍵盤 } private void Timer_OnTick(object sender, EventArgs e) { //倒計時時結(jié)束,彈出休息窗口 if (_vm.CountDownBreakMinute == 0 && _vm.CountDownBreakSecond == 0) { _timer.Stop(); OpenCountDown(); return; } //如果分鐘大于0,秒=0,那分-1,秒>0 減秒 if (_vm.CountDownBreakMinute > 0) { if (_vm.CountDownBreakSecond > 0) { _vm.CountDownBreakSecond--; } else { _vm.CountDownBreakMinute--; _vm.CountDownBreakSecond = 60; } } if (_vm.CountDownBreakMinute == 0) { _vm.CountDownBreakSecond--; } } } }
源碼
運行包:https://gitee.com/VipSoft/Reminder/releases/download/V1.0/Reminder.zip
源碼地址:https://gitee.com/VipSoft/Reminder
到此這篇關(guān)于基于WPF編寫有趣的久坐提醒桌面小程序的文章就介紹到這了,更多相關(guān)WPF桌面程序內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C#保存listbox中數(shù)據(jù)到文本文件的方法
這篇文章主要介紹了C#保存listbox中數(shù)據(jù)到文本文件的方法,涉及C#操作listbox數(shù)據(jù)的相關(guān)技巧,需要的朋友可以參考下2015-04-04C#模擬鏈表數(shù)據(jù)結(jié)構(gòu)的實例解析
這篇文章主要介紹了C#模擬鏈表數(shù)據(jù)結(jié)構(gòu)的實例解析,包括隊雙向鏈表的模擬方法,例子中隊鏈表的操作也有很好的說明,需要的朋友可以參考下2016-04-04C#中Decimal類型截取保留N位小數(shù)并且不進行四舍五入操作
這篇文章主要介紹了C#中Decimal類型截取保留N位小數(shù)并且不進行四舍五入操作,本文給出需求說明和實現(xiàn)代碼,需要的朋友可以參考下2015-06-06