■ Calendar 클래스를 사용하는 방법을 보여준다.
▶ NotifyType.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
namespace TestProject { /// <summary> /// 통지 타입 /// </summary> public enum NotifyType { /// <summary> /// 상태 메시지 /// </summary> StatusMessage, /// <summary> /// 에러 메시지 /// </summary> ErrorMessage }; } |
▶ Scenario.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
using System; namespace TestProject { /// <summary> /// 시나리오 /// </summary> public class Scenario { //////////////////////////////////////////////////////////////////////////////////////////////////// Property ////////////////////////////////////////////////////////////////////////////////////////// Public #region 제목 - Title /// <summary> /// 제목 /// </summary> public string Title { get; set; } #endregion #region 클래스 타입 - ClassType /// <summary> /// 클래스 타입 /// </summary> public Type ClassType { get; set; } #endregion } } |
▶ SamplePage1.xaml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
<Page x:Class="TestProject.SamplePage1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> <ScrollViewer Margin="10"> <StackPanel> <TextBlock Style="{StaticResource ScenarioDescriptionTextStyle}" TextWrapping="Wrap"> 달력 표시하기 </TextBlock> <TextBlock Style="{StaticResource BasicTextStyle}" HorizontalAlignment="Left" Margin="0 10 0 0" TextWrapping="Wrap"> 현재 날짜 및 시간에 대한 사용자의 디폴트 설정 또는 특정 재정의를 기반으로 달력을 생성합니다. 3 가지 예제 달력의 세부 정보가 아래에 표시됩니다. </TextBlock> <Button Margin="0 10 0 0" Content="결과 표시" Click="showResultButton_Click" /> <TextBlock Name="resultTextBlock" Style="{StaticResource BasicTextStyle}" Margin="0 10 0 0" TextWrapping="Wrap" /> </StackPanel> </ScrollViewer> </Grid> </Page> |
▶ SamplePage1.xaml.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 |
using System.Text; using Windows.Globalization; using Windows.UI.Xaml; using Windows.UI.Xaml.Controls; namespace TestProject { /// <summary> /// 샘플 페이지 1 /// </summary> public sealed partial class SamplePage1 : Page { //////////////////////////////////////////////////////////////////////////////////////////////////// Constructor ////////////////////////////////////////////////////////////////////////////////////////// Public #region 생성자 - SamplePage1() /// <summary> /// 생성자 /// </summary> public SamplePage1() { InitializeComponent(); } #endregion //////////////////////////////////////////////////////////////////////////////////////////////////// Method ////////////////////////////////////////////////////////////////////////////////////////// Private //////////////////////////////////////////////////////////////////////////////// Event #region 결과 표시 버튼 클릭시 처리하기 - showResultButton_Click(sender, e) /// <summary> /// 결과 표시 버튼 클릭시 처리하기 /// </summary> /// <param name="sender">이벤트 발생자</param> /// <param name="e">이벤트 인자</param> private void showResultButton_Click(object sender, RoutedEventArgs e) { Calendar calendar = new Calendar(); Calendar japaneseCalendar = new Calendar ( new[] { "ja-JP" }, CalendarIdentifiers.Japanese, ClockIdentifiers.TwelveHour ); Calendar hebrewCalendar = new Calendar ( new[] { "he-IL" }, CalendarIdentifiers.Hebrew, ClockIdentifiers.TwentyFourHour ); this.resultTextBlock.Text = ReportCalendarData(calendar , "사용자 디폴트 달력 시스템") + ReportCalendarData(japaneseCalendar, "달력 시스템" ) + ReportCalendarData(hebrewCalendar , "달력 시스템" ); } #endregion //////////////////////////////////////////////////////////////////////////////// Function #region 달력 데이터 보고하기 - ReportCalendarData(calendar, calendarLabel) /// <summary> /// 달력 데이터 보고하기 /// </summary> /// <param name="calendar">달력</param> /// <param name="calendarLabel">달력 레이블</param> /// <returns>달력 데이터</returns> private string ReportCalendarData(Calendar calendar, string calendarLabel) { StringBuilder stringBuilder = new StringBuilder(); stringBuilder.AppendLine($"{calendarLabel} : {calendar.GetCalendarSystem()}"); stringBuilder.AppendLine($"연도 : {calendar.YearAsString()}"); stringBuilder.AppendLine($"월 : {calendar.MonthAsSoloString()}"); stringBuilder.AppendLine($"일 : {calendar.DayAsPaddedString(2)}"); stringBuilder.AppendLine($"요일 : {calendar.DayOfWeekAsSoloString()}"); stringBuilder.AppendLine(); return stringBuilder.ToString(); } #endregion } } |
▶ SamplePage2.xaml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
<Page x:Class="TestProject.SamplePage2" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> <ScrollViewer Margin="10"> <StackPanel> <TextBlock Style="{StaticResource ScenarioDescriptionTextStyle}" TextWrapping="Wrap"> 달력 통계 가져오기 </TextBlock> <TextBlock Style="{StaticResource BasicTextStyle}" HorizontalAlignment="Left" Margin="0 10 0 0" TextWrapping="Wrap"> 현재 달력 날짜 및 시간에 대한 통계를 결정합니다. </TextBlock> <Button Margin="0 10 0 0" Content="결과 표시" Click="showResultButton_Click" /> <TextBlock Name="resultTextBlock" Style="{StaticResource BasicTextStyle}" Margin="0 10 0 0" TextWrapping="Wrap" /> </StackPanel> </ScrollViewer> </Grid> </Page> |
▶ SamplePage2.xaml.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 |
using System.Text; using Windows.Globalization; using Windows.UI.Xaml; using Windows.UI.Xaml.Controls; namespace TestProject { /// <summary> /// 샘플 페이지 2 /// </summary> public sealed partial class SamplePage2 : Page { //////////////////////////////////////////////////////////////////////////////////////////////////// Constructor ////////////////////////////////////////////////////////////////////////////////////////// Public #region 생성자 - SamplePage2() /// <summary> /// 생성자 /// </summary> public SamplePage2() { InitializeComponent(); } #endregion //////////////////////////////////////////////////////////////////////////////////////////////////// Method ////////////////////////////////////////////////////////////////////////////////////////// Private //////////////////////////////////////////////////////////////////////////////// Event #region 결과 표시 버튼 클릭시 처리하기 - showResultButton_Click(sender, e) /// <summary> /// 결과 표시 버튼 클릭시 처리하기 /// </summary> /// <param name="sender">이벤트 발생자</param> /// <param name="e">이벤트 인자</param> private void showResultButton_Click(object sender, RoutedEventArgs e) { Calendar calendar = new Calendar(); Calendar japaneseCalendar = new Calendar ( new[] { "ja-JP" }, CalendarIdentifiers.Japanese, ClockIdentifiers.TwelveHour ); Calendar hebrewCalendar = new Calendar ( new[] { "he-IL" }, CalendarIdentifiers.Hebrew, ClockIdentifiers.TwentyFourHour ); this.resultTextBlock.Text = ReportCalendarData(calendar , "사용자 디폴트 달력 시스템") + ReportCalendarData(japaneseCalendar, "달력 시스템" ) + ReportCalendarData(hebrewCalendar , "달력 시스템" ); } #endregion //////////////////////////////////////////////////////////////////////////////// Function #region 달력 데이터 보고하기 - ReportCalendarData(calendar, calendarLabel) /// <summary> /// 달력 데이터 보고하기 /// </summary> /// <param name="calendar">달력</param> /// <param name="calendarLabel">달력 레이블</param> /// <returns>달력 데이터</returns> private string ReportCalendarData(Calendar calendar, string calendarLabel) { StringBuilder stringBuilder = new StringBuilder(); stringBuilder.AppendLine($"{calendarLabel} : {calendar.GetCalendarSystem()}"); stringBuilder.AppendLine($"당해 연도 월 수 : {calendar.NumberOfMonthsInThisYear}"); stringBuilder.AppendLine($"당월 일 수 : {calendar.NumberOfDaysInThisMonth}"); stringBuilder.AppendLine($"당해 기간의 시간 : {calendar.NumberOfHoursInThisPeriod}"); stringBuilder.AppendLine($"연대 : {calendar.EraAsString()}"); stringBuilder.AppendLine(); return stringBuilder.ToString(); } #endregion } } |
▶ SamplePage3.xaml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
<Page x:Class="TestProject.SamplePage3" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> <ScrollViewer Margin="10"> <StackPanel> <TextBlock Style="{StaticResource ScenarioDescriptionTextStyle}" TextWrapping="Wrap"> 달력 열거 및 계산 </TextBlock> <TextBlock Style="{StaticResource BasicTextStyle}" HorizontalAlignment="Left" Margin="0 10 0 0" TextWrapping="Wrap"> 달력을 열거하고 달력 계산을 수행합니다. </TextBlock> <TextBlock Style="{StaticResource BasicTextStyle}" HorizontalAlignment="Left" Margin="0 10 0 0" TextWrapping="Wrap"> 달력은 일광 절약 시간 및 윤년과 같은 항목에 대한 주기적 조정을 포함하는 현지 표준 시간대 정보를 사용합니다. 필요한 경우 열거하면 다양한 달력 기간의 기간에 대한 가정을 피하는 데 도움이 됩니다. </TextBlock> <TextBlock Style="{StaticResource BasicTextStyle}" HorizontalAlignment="Left" Margin="0 10 0 0" TextWrapping="Wrap"> 달력 계산은 시스템의 현지 시간에 따라 다른 결과를 생성할 수 있습니다. 따라서 Calendar 클래스를 사용하는 코드는 사용할 수 있는 다양한 시간대와 날짜 범위에서 테스트해야 합니다. </TextBlock> <Button Margin="0 10 0 0" Content="결과 표시" Click="showResultButton_Click"/> <TextBlock Name="resultTextBlock" Style="{StaticResource BasicTextStyle}" Margin="0 10 0 0" TextWrapping="Wrap" /> </StackPanel> </ScrollViewer> </Grid> </Page> |
▶ SamplePage3.xaml.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 |
using System; using System.Text; using Windows.Globalization; using Windows.Globalization.DateTimeFormatting; using Windows.UI.Xaml; using Windows.UI.Xaml.Controls; namespace TestProject { /// <summary> /// 샘플 페이지 3 /// </summary> public sealed partial class SamplePage3 : Page { //////////////////////////////////////////////////////////////////////////////////////////////////// Constructor ////////////////////////////////////////////////////////////////////////////////////////// Public #region 생성자 - SamplePage3() /// <summary> /// 생성자 /// </summary> public SamplePage3() { InitializeComponent(); } #endregion //////////////////////////////////////////////////////////////////////////////////////////////////// Method ////////////////////////////////////////////////////////////////////////////////////////// Private //////////////////////////////////////////////////////////////////////////////// Event #region 결과 표시 버튼 클릭시 처리하기 - showResultButton_Click(sender, e) /// <summary> /// 결과 표시 버튼 클릭시 처리하기 /// </summary> /// <param name="sender">이벤트 발생자</param> /// <param name="e">이벤트 인자</param> private void showResultButton_Click(object sender, RoutedEventArgs e) { StringBuilder stringBuilder = new StringBuilder(); stringBuilder.AppendLine ( "일본 연호 달력의 각 연도는 일정하지 않습니다. 주어진 제국 연대의 길이에 따라 결정됩니다 : " ); stringBuilder.AppendLine(); Calendar calendar = new Calendar ( new[] { "en-US" }, CalendarIdentifiers.Japanese, ClockIdentifiers.TwentyFourHour ); for(calendar.Era = calendar.FirstEra; true; calendar.AddYears(1)) { stringBuilder.AppendLine($"연대 {calendar.EraAsString()} : {calendar.NumberOfYearsInThisEra}년"); for(calendar.Year = calendar.FirstYearInThisEra; true; calendar.AddYears(1)) { calendar.Month = calendar.FirstMonthInThisYear; calendar.Day = calendar.FirstDayInThisMonth; calendar.Period = calendar.FirstPeriodInThisDay; calendar.Hour = calendar.FirstHourInThisPeriod; calendar.Minute = 0; calendar.Second = 0; calendar.Nanosecond = 0; if(calendar.Year % 1000 == 0) { stringBuilder.AppendLine(); } else if(calendar.Year % 10 == 0) { stringBuilder.Append("."); } if(calendar.Year == calendar.LastYearInThisEra) { break; } } stringBuilder.AppendLine(); if(calendar.Era == calendar.LastEra) { break; } } stringBuilder.AppendLine(); stringBuilder.AppendLine("하루의 시간 수는 일정하지 않습니다. 2012년 11월 4일 미국 달력이 일광 절약 시간에서 표준 시간으로 전환됩니다 :\n"); DateTimeFormatter formatter = new DateTimeFormatter("longdate"); Calendar startCalendar = new Calendar ( new string[] { "en-US" }, CalendarIdentifiers.Gregorian, ClockIdentifiers.TwentyFourHour, "America/Los_Angeles" ); DateTime targetDate = new DateTime(2012, 11, 4, 9, 0, 0, DateTimeKind.Utc); startCalendar.SetDateTime(targetDate); Calendar endCalendar = startCalendar.Clone(); startCalendar.AddDays(-1); endCalendar.AddDays(1); while(startCalendar.Day <= endCalendar.Day) { DateTimeOffset date = startCalendar.GetDateTime(); stringBuilder.AppendFormat("{0} : {1}시간\n", formatter.Format(date), startCalendar.NumberOfHoursInThisPeriod); Calendar nextCalendar = startCalendar.Clone(); nextCalendar.AddDays(1); for(startCalendar.Hour = startCalendar.FirstHourInThisPeriod; true; startCalendar.AddHours(1)) { stringBuilder.AppendFormat("{0} ", startCalendar.HourAsPaddedString(2)); if(startCalendar.Day == nextCalendar.Day && startCalendar.Period == nextCalendar.Period) { break; } } stringBuilder.AppendLine(); } this.resultTextBlock.Text = stringBuilder.ToString(); } #endregion } } |
▶ SamplePage4.xaml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
<Page x:Class="TestProject.SamplePage4" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> <ScrollViewer Margin="10"> <StackPanel> <TextBlock Style="{StaticResource ScenarioDescriptionTextStyle}" TextWrapping="Wrap"> 언어별 유니코드 확장을 갖는 달력 </TextBlock> <TextBlock Style="{StaticResource BasicTextStyle}" HorizontalAlignment="Left" Margin="0 10 0 0" TextWrapping="Wrap"> 지원되는 유니코드 확장 태그가 있는 언어 이름을 사용하여 캘린더를 만들고 캘린더 개체에서 확장 태그를 사용하는 방법을 보여줍니다. </TextBlock> <Button Margin="0 10 0 0" Content="결과 표시" Click="showResultButton_Click" /> <TextBlock Name="resultTextBlock" Style="{StaticResource BasicTextStyle}" Margin="0 10 0 0" TextWrapping="Wrap" /> </StackPanel> </ScrollViewer> </Grid> </Page> |
▶ SamplePage4.xaml.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 |
using System.Text; using Windows.Globalization; using Windows.UI.Xaml; using Windows.UI.Xaml.Controls; namespace TestProject { /// <summary> /// 샘플 페이지 4 /// </summary> public sealed partial class SamplePage4 : Page { //////////////////////////////////////////////////////////////////////////////////////////////////// Constructor ////////////////////////////////////////////////////////////////////////////////////////// Public #region 생성자 - SamplePage4() /// <summary> /// 생성자 /// </summary> public SamplePage4() { InitializeComponent(); } #endregion //////////////////////////////////////////////////////////////////////////////////////////////////// Method ////////////////////////////////////////////////////////////////////////////////////////// Private //////////////////////////////////////////////////////////////////////////////// Event #region 결과 표시 버튼 클릭시 처리하기 - showResultButton_Click(sender, e) /// <summary> /// 결과 표시 버튼 클릭시 처리하기 /// </summary> /// <param name="sender">이벤트 발생자</param> /// <param name="e">이벤트 인자</param> private void showResultButton_Click(object sender, RoutedEventArgs e) { Calendar calendar1 = new Calendar(); Calendar calendar2 = new Calendar(new[] { "ar-SA-u-ca-gregory-nu-Latn" }); Calendar calendar3 = new Calendar(new[] { "he-IL-u-nu-arab" }); Calendar calendar4 = new Calendar(new[] { "he-IL-u-ca-hebrew-co-phonebk" }); this.resultTextBlock.Text = ReportCalendarData ( calendar1, "사용자 디폴트 달력 객체" ) + ReportCalendarData ( calendar2, "아랍어, 그레고리력 및 라틴 숫자 체계(ar-SA-ca-gregory-nu-Latn)를 갖는 달력 객체" ) + ReportCalendarData ( calendar3, "히브리어, 해당 언어의 기본 달력 및 아랍 숫자 체계(he-IL-u-nu-arab)를 갖는 달력 객체" ) + ReportCalendarData ( calendar4, "히브리어, 히브리어 달력, 해당 언어에 대한 기본 숫자 체계 및 전화번호부 데이터 정렬(he-IL-u-ca-hebrew-co-phonebk)을 갖는 달력 개체" ); } #endregion //////////////////////////////////////////////////////////////////////////////// Function #region 달력 데이터 보고하기 - ReportCalendarData(calendar, calendarLabel) /// <summary> /// 달력 데이터 보고하기 /// </summary> /// <param name="calendar">달력</param> /// <param name="calendarLabel">달력 레이블</param> /// <returns>달력 데이터</returns> private string ReportCalendarData(Calendar calendar, string calendarLabel) { StringBuilder stringBuilder = new StringBuilder(); stringBuilder.AppendLine($"{calendarLabel} : {calendar.GetCalendarSystem()}"); stringBuilder.AppendLine($"달력 : {calendar.GetCalendarSystem()}"); stringBuilder.AppendLine($"숫자 시스템 : {calendar.NumeralSystem}"); stringBuilder.AppendLine($"결정 언어 : {calendar.ResolvedLanguage}"); stringBuilder.AppendLine($"연도 : {calendar.YearAsString()}"); stringBuilder.AppendLine($"월 : {calendar.MonthAsSoloString()}"); stringBuilder.AppendLine($"일 : {calendar.DayAsPaddedString(2)}"); stringBuilder.AppendLine($"요일 : {calendar.DayOfWeekAsSoloString()}"); stringBuilder.AppendLine(); return stringBuilder.ToString(); } #endregion } } |
▶ SamplePage5.xaml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
<Page x:Class="TestProject.SamplePage5" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> <ScrollViewer Margin="10"> <StackPanel> <TextBlock Style="{StaticResource ScenarioDescriptionTextStyle}" TextWrapping="Wrap"> 달력 시간대 지원 </TextBlock> <TextBlock Style="{StaticResource BasicTextStyle}" HorizontalAlignment="Left" Margin="0 10 0 0" TextWrapping="Wrap"> 달력 내에서 여러 시간대를 설정하거나 가져오고 달력의 날짜 및 시간 속성에서 시간대 변경의 효과를 표시합니다. </TextBlock> <Button Margin="0 10 0 0" Content="결과 표시" Click="showResultButton_Click" /> <TextBlock Name="resultTextBlock" Style="{StaticResource BasicTextStyle}" Margin="0 10 0 0" TextWrapping="Wrap" /> </StackPanel> </ScrollViewer> </Grid> </Page> |
▶ SamplePage5.xaml.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 |
using System.Text; using Windows.Globalization; using Windows.UI.Xaml; using Windows.UI.Xaml.Controls; namespace TestProject { /// <summary> /// 샘플 페이지 5 /// </summary> public sealed partial class SamplePage5 : Page { //////////////////////////////////////////////////////////////////////////////////////////////////// Constructor ////////////////////////////////////////////////////////////////////////////////////////// Public #region 생성자 - SamplePage5() /// <summary> /// 생성자 /// </summary> public SamplePage5() { InitializeComponent(); } #endregion //////////////////////////////////////////////////////////////////////////////////////////////////// Method ////////////////////////////////////////////////////////////////////////////////////////// Private //////////////////////////////////////////////////////////////////////////////// Event #region 결과 표시 버튼 클릭시 처리하기 - showResultButton_Click(sender, e) /// <summary> /// 결과 표시 버튼 클릭시 처리하기 /// </summary> /// <param name="sender">이벤트 발생자</param> /// <param name="e">이벤트 인자</param> private void showResultButton_Click(object sender, RoutedEventArgs e) { string[] timeZoneArray = new[] { "UTC", "America/New_York", "Asia/Kolkata" }; StringBuilder stringBuilder = new StringBuilder(); Calendar calendar = new Calendar(); string localTimeZone = calendar.GetTimeZone(); stringBuilder.AppendLine("현재 날짜 및 시각 :"); stringBuilder.AppendLine(ReportCalendarData(calendar)); foreach(string timeZone in timeZoneArray) { calendar.ChangeTimeZone(timeZone); stringBuilder.AppendLine(ReportCalendarData(calendar)); } stringBuilder.AppendLine(); calendar.ChangeTimeZone(localTimeZone); stringBuilder.AppendLine("내년 2월 14일의 같은 시각 : "); calendar.AddYears(1); calendar.Month = 2; calendar.Day = 14; stringBuilder.AppendLine(ReportCalendarData(calendar)); foreach(string timeZone in timeZoneArray) { calendar.ChangeTimeZone(timeZone); stringBuilder.AppendLine(ReportCalendarData(calendar)); } stringBuilder.AppendLine(); calendar.ChangeTimeZone(localTimeZone); stringBuilder.AppendLine("내년 10월 14일의 같은 시각 : "); calendar.AddMonths(8); stringBuilder.AppendLine(ReportCalendarData(calendar)); foreach(string timeZone in timeZoneArray) { calendar.ChangeTimeZone(timeZone); stringBuilder.AppendLine(ReportCalendarData(calendar)); } stringBuilder.AppendLine(); this.resultTextBlock.Text = stringBuilder.ToString(); } #endregion //////////////////////////////////////////////////////////////////////////////// Function #region 달력 데이터 보고하기 - ReportCalendarData(calendar) /// <summary> /// 달력 데이터 보고하기 /// </summary> /// <param name="calendar">달력</param> /// <returns>달력 데이터</returns> private string ReportCalendarData(Calendar calendar) { return string.Format ( "시간대 {0} : {1} {2} {3} {4} {5}:{6}:{7} {8} {9}", calendar.GetTimeZone(), calendar.YearAsString(), calendar.MonthAsSoloString(), calendar.DayAsPaddedString(2), calendar.DayOfWeekAsSoloString(), calendar.HourAsPaddedString(2), calendar.MinuteAsPaddedString(2), calendar.SecondAsPaddedString(2), calendar.PeriodAsString(), calendar.TimeZoneAsString(3) ); } #endregion } } |
▶ MainPage.xaml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
<Page x:Class="TestProject.MainPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="using:TestProject" FontFamily="나눔고딕코딩" FontSize="16"> <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> <Grid.RowDefinitions> <RowDefinition Height="Auto" /> <RowDefinition Height="*" /> </Grid.RowDefinitions> <StackPanel Grid.Row="0" Orientation="Horizontal"> <Border Background="{ThemeResource SystemControlBackgroundChromeMediumBrush}"> <ToggleButton Style="{StaticResource SymbolButton}" VerticalAlignment="Center" Foreground="{ThemeResource ApplicationForegroundThemeBrush}" Click="paneToggleButton_Click"> <ToggleButton.Content> <FontIcon FontFamily="Segoe MDL2 Assets" Glyph="" /> </ToggleButton.Content> </ToggleButton> </Border> <Image VerticalAlignment="Center" Margin="5 5 0 0" AutomationProperties.AccessibilityView="Raw" Stretch="None" Source="IMAGE/windows-sdk.png" /> <TextBlock Style="{StaticResource TagLineTextStyle}" VerticalAlignment="Center" Margin="5 0 0 0" Text="유니버셜 윈도우즈 플랫폼" /> </StackPanel> <SplitView Name="splitView" Grid.Row="1" DisplayMode="Inline" IsPaneOpen="True"> <SplitView.Pane> <RelativePanel Margin="10 0 0 0"> <TextBlock Name="sampleTitle" Style="{StaticResource SampleHeaderTextStyle}" Margin="0 10 0 0" TextWrapping="Wrap" Text="C# 달력 예제" /> <ListBox Name="listBox" RelativePanel.Below="sampleTitle" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="0 10 0 0" BorderThickness="0" Background="Transparent" SelectionMode="Single" SelectionChanged="listBox_SelectionChanged"> <ListBox.ItemTemplate> <DataTemplate x:DataType="local:Scenario"> <TextBlock Text="{x:Bind Title}" /> </DataTemplate> </ListBox.ItemTemplate> </ListBox> </RelativePanel> </SplitView.Pane> <Frame Name="frame" Margin="5" /> </SplitView> </Grid> </Page> |
▶ MainPage.xaml.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 |
using System.Collections.Generic; using Windows.Foundation; using Windows.Graphics.Display; using Windows.UI.ViewManagement; using Windows.UI.Xaml; using Windows.UI.Xaml.Controls; using Windows.UI.Xaml.Navigation; namespace TestProject { /// <summary> /// 메인 페이지 /// </summary> public sealed partial class MainPage : Page { //////////////////////////////////////////////////////////////////////////////////////////////////// Field ////////////////////////////////////////////////////////////////////////////////////////// Private #region Field /// <summary> /// 시나리오 리스트 /// </summary> private List<Scenario> scenarioList = new List<Scenario> { new Scenario() { Title = "달력 표시하기" , ClassType = typeof(SamplePage1) }, new Scenario() { Title = "달력 통계 가져오기" , ClassType = typeof(SamplePage2) }, new Scenario() { Title = "달력 열거 및 계산" , ClassType = typeof(SamplePage3) }, new Scenario() { Title = "언어별 유니코드 확장을 갖는 달력", ClassType = typeof(SamplePage4) }, new Scenario() { Title = "달력 시간대 지원" , ClassType = typeof(SamplePage5) } }; #endregion //////////////////////////////////////////////////////////////////////////////////////////////////// Constructor ////////////////////////////////////////////////////////////////////////////////////////// Public #region 생성자 - MainPage() /// <summary> /// 생성자 /// </summary> public MainPage() { InitializeComponent(); #region 윈도우 크기를 설정한다. double width = 800d; double height = 600d; double dpi = (double)DisplayInformation.GetForCurrentView().LogicalDpi; ApplicationView.PreferredLaunchWindowingMode = ApplicationViewWindowingMode.PreferredLaunchViewSize; Size windowSize = new Size(width * 96d / dpi, height * 96d / dpi); ApplicationView.PreferredLaunchViewSize = windowSize; Window.Current.Activate(); ApplicationView.GetForCurrentView().TryResizeView(windowSize); #endregion #region 윈도우 제목을 설정한다. ApplicationView.GetForCurrentView().Title = "Calendar 클래스 사용하기"; #endregion } #endregion //////////////////////////////////////////////////////////////////////////////////////////////////// Method ////////////////////////////////////////////////////////////////////////////////////////// Protected #region 탐색되는 경우 처리하기 - OnNavigatedTo(e) /// <summary> /// 탐색되는 경우 처리하기 /// </summary> /// <param name="e">이벤트 인자</param> protected override void OnNavigatedTo(NavigationEventArgs e) { List<Scenario> sourceList = new List<Scenario>(); int i = 1; foreach(Scenario scenario in scenarioList) { sourceList.Add ( new Scenario { Title = $"{i++}) {scenario.Title}", ClassType = scenario.ClassType } ); } this.listBox.ItemsSource = sourceList; if(Window.Current.Bounds.Width < 640) { this.listBox.SelectedIndex = -1; } else { this.listBox.SelectedIndex = 0; } } #endregion ////////////////////////////////////////////////////////////////////////////////////////// Private #region 창 토글 버튼 클릭시 처리하기 - paneToggleButton_Click(sender, e) /// <summary> /// 창 토글 버튼 클릭시 처리하기 /// </summary> /// <param name="sender">이벤트 발생자</param> /// <param name="e">이벤트 인자</param> private void paneToggleButton_Click(object sender, RoutedEventArgs e) { this.splitView.IsPaneOpen = !splitView.IsPaneOpen; } #endregion #region 리스트 박스 선택 변경시 처리하기 - listBox_SelectionChanged(sender, e) /// <summary> /// 리스트 박스 선택 변경시 처리하기 /// </summary> /// <param name="sender">이벤트 발생자</param> /// <param name="e">이벤트 인자</param> private void listBox_SelectionChanged(object sender, SelectionChangedEventArgs e) { ListBox listBox = sender as ListBox; Scenario scenario = listBox.SelectedItem as Scenario; if(scenario != null) { this.frame.Navigate(scenario.ClassType); if(Window.Current.Bounds.Width < 640) { this.splitView.IsPaneOpen = false; } } } #endregion } } |