最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

基于WPF編寫有趣的久坐提醒桌面小程序

 更新時(shí)間:2023年08月08日 09:18:29   作者:VipSoft  
這篇文章主要為大家詳細(xì)介紹了如何基于WPF編寫一個(gè)有趣的久坐提醒桌面小程序,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以動(dòng)手嘗試一下

久坐提醒桌面小程序: 干這行職業(yè)病比較多,之前用愛麗(即:玻璃酸鈉滴眼液),用的時(shí)候挺舒服,緩解吧,不過治標(biāo)不治本。注意休息,加強(qiáng)鍛煉非常有必要,這周開始每工作1小時(shí),休息10分鐘(程序中有鎖鍵盤鼠標(biāo)的功能,那個(gè)太狠了,萬一領(lǐng)導(dǎo)要東西電腦鎖住了尷尬了,被我注釋了),看看遠(yuǎn)方,綠值,站個(gè)樁,或者高架馬步,馬步扎得好,到老疾病少,不過注意別把膝蓋搞壞了,我玩得狠現(xiàn)在有積液了 

依賴庫

  • .Net Framework 4.5
  • HandyControl 3.2

網(wǎng)上下的一些小程序,達(dá)不到自己想要的效果,要么就是功能復(fù)雜,于是選擇了自己開發(fā)。
采用WPF 基于HandyControl 開發(fā)的小程序。

  • 有2年不寫WPF開發(fā)了,練練手
  • 平時(shí)工作一坐就是半天,眼睛不怎么好了,干眼嚴(yán)重

說明

設(shè)置提醒時(shí)間,及休息時(shí)間

默認(rèn)50分鐘休息10分鐘,按整點(diǎn)算(強(qiáng)迫癥),如果工作不足10分鐘,則將時(shí)間加到下一輪中。

取消整點(diǎn)勾選,從開始時(shí)計(jì)劃

久坐提醒倒計(jì)時(shí)

開始后右下角有小球球,顯示倒計(jì)時(shí),像360那樣的窗口懸停不知道怎么做,沒繼續(xù)研究

休息提醒倒計(jì)時(shí)

距休息10秒時(shí),窗體會(huì)顯示到最上層,同時(shí)字體顏色變?yōu)辄S色

休息到計(jì)時(shí)

從網(wǎng)上找的護(hù)眼圖片,可以照著練練,再起來走一走。

代碼說明

設(shè)置界面、倒計(jì)時(shí)、休息界面,三個(gè)頁面,通過 VmReminder 進(jìn)行數(shù)據(jù)共享

主窗體設(shè)置

這是基本框架,參考Office設(shè)計(jì),右上解可擴(kuò)展【設(shè)置】、【幫助】功能,可用于其它項(xiàng)目

設(shè)置工作時(shí)長、休息時(shí)長,默認(rèn)從整點(diǎn)開始計(jì)時(shí)(有強(qiáng)迫癥)

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)用倒計(jì)時(shí)窗體,并將倒計(jì)時(shí)窗體設(shè)為主窗體,否則點(diǎn)拖盤圖標(biāo),會(huì)彈出設(shè)置窗體
    CountDown countDown = new CountDown();
    countDown.DataContext = this._vm;
    countDown.InitData();
    Application.Current.MainWindow = countDown;
    countDown.Show();
    this.Close();
}

工作到計(jì)時(shí)

窗口倒計(jì)時(shí)時(shí),顯示在窗口右下角,

CountDown.xml

托盤圖標(biāo)--放在這個(gè)窗體下的原因,是因?yàn)?休息轉(zhuǎn)工作時(shí),避免托盤下會(huì)出現(xiàn)多個(gè)圖標(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#}" 顯示倒計(jì)時(shí),格式化,如果個(gè)位數(shù)時(shí),前面補(bǔ)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;
}

通過定時(shí)器,工作實(shí)現(xiàn)倒計(jì)時(shí)功能

private void Timer_OnTick(object sender, EventArgs e)
{
    Remind();
    //倒計(jì)時(shí)時(shí)結(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--;
    }
}

休息倒計(jì)時(shí)

休息窗體顯示兩護(hù)眼張圖片和一個(gè)休息到計(jì)時(shí),按ESC時(shí)可取消本次休息,

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
    {
        // 定時(shí)器
        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)
        {
            //倒計(jì)時(shí)時(shí)結(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--;
            }
        }
    }
}

源碼

運(yùn)行包: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#實(shí)現(xiàn)DevExpress本地化實(shí)例詳解

    C#實(shí)現(xiàn)DevExpress本地化實(shí)例詳解

    這篇文章主要介紹了C#實(shí)現(xiàn)DevExpress本地化,以實(shí)例形式較為詳細(xì)的分析了DevExpress本地化的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-08-08
  • 基于WPF實(shí)現(xiàn)代碼查看器控件

    基于WPF實(shí)現(xiàn)代碼查看器控件

    這篇文章主要為大家詳細(xì)介紹了WPF如何實(shí)現(xiàn)代碼查看器控件,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)或工作有一定幫助,感興趣的小伙伴可以了解一下
    2022-11-11
  • C# 服務(wù)器發(fā)送郵件失敗實(shí)例分析

    C# 服務(wù)器發(fā)送郵件失敗實(shí)例分析

    在本篇文章里小編給大家?guī)硪黄P(guān)于C# 服務(wù)器發(fā)送郵件失敗實(shí)例內(nèi)容,需要的朋友們可以學(xué)習(xí)下。
    2020-03-03
  • C#SuperSocket的搭建并配置啟動(dòng)總結(jié)

    C#SuperSocket的搭建并配置啟動(dòng)總結(jié)

    在本篇文章里我們給大家總結(jié)了關(guān)于C#SuperSocket的搭建并配置啟動(dòng)的相關(guān)內(nèi)容,正在學(xué)習(xí)的朋友們跟著參考下。
    2019-05-05
  • C#編程實(shí)現(xiàn)自定義熱鍵的方法

    C#編程實(shí)現(xiàn)自定義熱鍵的方法

    這篇文章主要介紹了C#編程實(shí)現(xiàn)自定義熱鍵的方法,涉及C#鍵盤按鍵設(shè)置的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-08-08
  • C#?窗口過程消息處理?WndProc的方法詳解

    C#?窗口過程消息處理?WndProc的方法詳解

    在WinForm中一般采用重寫WndProc的方法對窗口或控件接受到的指定消息進(jìn)行處理,本文給大家介紹C#窗口過程消息處理WndProc的方法詳解,感興趣的朋友一起看看吧
    2025-04-04
  • 基于C#編寫一個(gè)操作XML的簡單類庫XMLHelper

    基于C#編寫一個(gè)操作XML的簡單類庫XMLHelper

    這篇文章主要為大家詳細(xì)介紹了如何基于C#編寫一個(gè)操作XML的簡單類庫——XMLHelper,文中的示例代碼講解詳細(xì),需要的小伙伴可以參考一下
    2023-06-06
  • C#實(shí)現(xiàn)熱更新服務(wù)器程序的具體過程

    C#實(shí)現(xiàn)熱更新服務(wù)器程序的具體過程

    什么是熱更新?就是不停機(jī)更新,實(shí)時(shí)更新,這篇文章主要給大家介紹了關(guān)于C#實(shí)現(xiàn)熱更新服務(wù)器程序的具體過程,通過熱更新改善用戶體驗(yàn)(節(jié)省流量、時(shí)間、操作程度),需要的朋友可以參考下
    2021-07-07
  • C#逐行讀取文件的方法

    C#逐行讀取文件的方法

    這篇文章主要介紹了C#逐行讀取文件的方法,針對較大文件的讀取非常實(shí)用,需要的朋友可以參考下
    2015-07-07
  • C#微信公眾號(hào)開發(fā)之用戶上下文WeixinContext和MessageContext

    C#微信公眾號(hào)開發(fā)之用戶上下文WeixinContext和MessageContext

    這篇文章介紹了C#微信公眾號(hào)開發(fā)之用戶上下文WeixinContext和MessageContext,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-06-06

最新評(píng)論

衡阳县| 永城市| 余干县| 临城县| 吴江市| 景德镇市| 开平市| 江孜县| 霞浦县| 建始县| 大埔县| 无棣县| 重庆市| 洛川县| 邛崃市| 长葛市| 岑溪市| 延津县| 孟津县| 昆山市| 共和县| 井陉县| 凤翔县| 怀化市| 呼伦贝尔市| 昭觉县| 安丘市| 台湾省| 屏东县| 宁南县| 宜黄县| 麦盖提县| 庆城县| 洱源县| 诸暨市| 客服| 阜康市| 华安县| 鲜城| 博湖县| 南汇区|