欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

久坐提醒桌面小程序: 干這行職業(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ù)到文本文件的方法,涉及C#操作listbox數(shù)據(jù)的相關(guān)技巧,需要的朋友可以參考下
    2015-04-04
  • C#生成唯一不重復(fù)訂單號

    C#生成唯一不重復(fù)訂單號

    本文給大家介紹的是使用C#生成唯一不重復(fù)訂單號的方法,主要用到了lock鎖,有需要的小伙伴可以參考下。
    2015-07-07
  • C#自定義RSA加密解密及RSA簽名和驗證類實例

    C#自定義RSA加密解密及RSA簽名和驗證類實例

    這篇文章主要介紹了C#自定義RSA加密解密及RSA簽名和驗證類,實例分析了C#實現(xiàn)RSA加密解密及RSA簽名和驗證的相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-03-03
  • 詳解C#中IAsyncDisposable接口的使用

    詳解C#中IAsyncDisposable接口的使用

    在.NET Core 3.0的版本更新中,官方我們帶來了一個新的接口 IAsyncDisposable,下面小編就來和大家聊聊它的簡單使用吧,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-07-07
  • C#中對字符串進行壓縮和解壓的實現(xiàn)

    C#中對字符串進行壓縮和解壓的實現(xiàn)

    本文主要介紹了C#中對字符串進行壓縮和解壓的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • C#獲取攝像頭拍照顯示圖像的方法

    C#獲取攝像頭拍照顯示圖像的方法

    這篇文章主要為大家詳細(xì)介紹了C#獲取攝像頭拍照顯示圖像的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • C#模擬鏈表數(shù)據(jù)結(jié)構(gòu)的實例解析

    C#模擬鏈表數(shù)據(jù)結(jié)構(gòu)的實例解析

    這篇文章主要介紹了C#模擬鏈表數(shù)據(jù)結(jié)構(gòu)的實例解析,包括隊雙向鏈表的模擬方法,例子中隊鏈表的操作也有很好的說明,需要的朋友可以參考下
    2016-04-04
  • C#中Decimal類型截取保留N位小數(shù)并且不進行四舍五入操作

    C#中Decimal類型截取保留N位小數(shù)并且不進行四舍五入操作

    這篇文章主要介紹了C#中Decimal類型截取保留N位小數(shù)并且不進行四舍五入操作,本文給出需求說明和實現(xiàn)代碼,需要的朋友可以參考下
    2015-06-06
  • WinForm項目中添加幫助文檔功能

    WinForm項目中添加幫助文檔功能

    這篇文章介紹了WinForm項目中添加幫助文檔功能的方法,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • C#中ExcelDataReader的具體使用

    C#中ExcelDataReader的具體使用

    ExcelDataReader是一個輕量級的可快速讀取Excel文件中數(shù)據(jù)的工具,本文主要介紹了C#中ExcelDataReader的具體使用,具有一定的參考價值,感興趣的可以了解一下
    2025-04-04

最新評論