WPF月視圖控制項

來源:互聯網
上載者:User

標籤:void   sof   tco   event   rgs   order   none   pen   init   

原文:WPF月視圖控制項

簡介

在做一個應用時,需要做成日曆月視圖的形式。自己做較麻煩,於是上網找找看,在CodeProject上發現了這個Quick and Simple WPF Month-view Calendar,可是程式的後台是用VB寫成的。雖然我不會寫VB,但是閱讀也能懂個八九不離十。於是將其改寫為C#,做了些改進,使其更通用。如下:

使用方式較簡單,在XAML中聲明,然後在代碼中使用。支援在定義自每天事項介面和雙擊事件。

XAML聲明:

<Window x:Class="MonthViewTest.MainWindow"        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"        xmlns:monthControl="clr-namespace:MonthView.Controls;assembly=MonthView"        Title="MainWindow"        Width="800"        Height="600">    <monthControl:MonthControl x:Name="TestMonthControl" /></Window>

後台代碼使用:

using MonthView.EventArgs;using System.Windows;namespace MonthViewTest{    /// <summary>    /// MainWindow.xaml 的互動邏輯    /// </summary>    public partial class MainWindow : Window    {        public MainWindow()        {            InitializeComponent();            //事項源            TestMonthControl.DateTimeEvents = DiaryCache.Diaries;            //事項介面工廠            TestMonthControl.DateTimeEventControlFactory=new DiaryBreifControlFactory();            TestMonthControl.DayBlankDoubleClicked += AddNewDiary;        }        /// <summary>        /// 日期控制項雙擊的處理        /// </summary>        /// <param name="e"></param>        private void AddNewDiary(DayEventArgs e)        {            var diary = new Diary            {                HappenTime = e.DayTime,            };            var wnd = new DiaryWindow            {                Diary = diary,                Title="添加日記",                Owner = Application.Current.MainWindow            };            if (true == wnd.ShowDialog())            {                DiaryCache.Diaries.Add(wnd.Diary);            }        }    }}
原理

代碼結構如下:

核心代碼位於DayControl中。構建介面過程如下:利用System.Globalization.Calendar計算出月份的總天數,再根據當月第一天為星期幾計算出總共的周數。將相應周數的周控制項加入到月控制項,再依次將一個月中每天對應的天控制項放入其對應的周控制項。

缺點:事項列表需一次性載入到記憶體中,可修改代碼利用委託按需載入。控制項不支援泛型,如果不需要在XAML中使用,可修改代碼使其支援泛型。

代碼

部落格園:WPFMonthView。

GitHub:WPFMonthView。

WPF月視圖控制項

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.