前の手順では、C1Calendar コントロールをアプリケーションに追加しました。この手順では、DataSeries オブジェクトとそのデータを追加します。
プログラムでカレンダーにデータを追加するには、次の手順に従います。
Visual Basic コードの書き方
Visual Basic |
コードのコピー
|
---|---|
Imports Windows.UI.ViewManagement Imports C1.Xaml Imports C1.Xaml.Calendar |
C# コードの書き方
C# |
コードのコピー
|
---|---|
using Windows.UI.ViewManagement; using C1.Xaml; using C1.Xaml.Calendar; |
Visual Basic コードの書き方
Visual Basic |
コードのコピー
|
---|---|
' 予定の辞書
Private _boldedDays As New Dictionary(Of DateTime, String)()
Private _dayTemplateSelector As DaySlotTemplateSelector = Nothing
Private _loaded As Boolean = False
|
C# コードの書き方
C# |
コードのコピー
|
---|---|
// 予定の辞書
private Dictionary<DateTime, string> _boldedDays = new Dictionary<DateTime, string>();
private DaySlotTemplateSelector _dayTemplateSelector = null;
private bool _loaded = false;
|
Visual Basic コードの書き方
Visual Basic |
コードのコピー
|
---|---|
Public Sub New()
Me.InitializeComponent()
AddHandler Window.Current.SizeChanged, AddressOf Current_SizeChanged
Calendar.DayOfWeekSlotTemplateSelector = New DayOfWeekTemplateSelector()
' 太字の日を追加します
_boldedDays.Add(DateTime.Today.AddDays(2), "スポーツ\r\nを忘れない。")
_boldedDays.Add(DateTime.Today.AddDays(13), "誕生日")
_boldedDays.Add(DateTime.Today.AddDays(22), "重要な会議")
_boldedDays.Add(DateTime.Today.AddDays(-1), "8時に記念& vbCr & vbLf &パーティー")
_boldedDays.Add(DateTime.Today.AddDays(-12), "医者との約束")
_boldedDays.Add(DateTime.Today.AddDays(-21), "会議2日目")
_boldedDays.Add(DateTime.Today.AddDays(-22), "会議1日目")
For Each val As DateTime In _boldedDays.Keys
Calendar.BoldedDates.Add(val)
Next
End Sub
|
C# コードの書き方
C# |
コードのコピー
|
---|---|
public MainPage()
{
this.InitializeComponent();
Window.Current.SizeChanged += Current_SizeChanged;
Calendar.DayOfWeekSlotTemplateSelector = new DayOfWeekTemplateSelector();
// 太字の日を追加します
_boldedDays.Add(DateTime.Today.AddDays(2), "スポーツ\r\nを忘れない。");
_boldedDays.Add(DateTime.Today.AddDays(13), "誕生日");
_boldedDays.Add(DateTime.Today.AddDays(22), "重要な会議");
_boldedDays.Add(DateTime.Today.AddDays(-1), "8時に記念\r\nパーティー");
_boldedDays.Add(DateTime.Today.AddDays(-12), "医者との約束");
_boldedDays.Add(DateTime.Today.AddDays(-21), "会議2日目");
_boldedDays.Add(DateTime.Today.AddDays(-22), "会議1日目");
foreach (DateTime val in _boldedDays.Keys)
{
Calendar.BoldedDates.Add(val);
}
}
|
Visual Basic コードの書き方
Visual Basic |
コードのコピー
|
---|---|
Private Sub Calendar_SelectedDateChanged(sender As Object, e As DateChangedEventArgs) If Calendar.SelectedDates.Count > 0 AndAlso _boldedDays.ContainsKey(Calendar.SelectedDates(0)) Then dayInfo.Text = _boldedDays(Calendar.SelectedDates(0)) Else dayInfo.Text = "" End If End Sub ''' <summary> ''' 日付を太字にするためのカスタム DataTemplate を使用する DayTemplateSelector ''' </summary> Private ReadOnly Property DayTemplateSelector() As DaySlotTemplateSelector Get If _dayTemplateSelector Is Nothing Then _dayTemplateSelector = TryCast(Resources("DaySlotTemplateSelector"), DaySlotTemplateSelector) If _dayTemplateSelector IsNot Nothing Then _dayTemplateSelector.BoldedDays = Me._boldedDays End If End If Return _dayTemplateSelector End Get End Property Private Sub Current_SizeChanged(sender As Object, e As Windows.UI.Core.WindowSizeChangedEventArgs) UpdateViewState() End Sub Private Sub UpdateViewState() Calendar.ClearValue(HeightProperty) Select Case ApplicationView.Value Case ApplicationViewState.Filled Calendar.DaySlotTemplateSelector = DayTemplateSelector VisualStateManager.GoToState(Me, "Fill", False) Exit Select Case ApplicationViewState.FullScreenLandscape Calendar.DaySlotTemplateSelector = DayTemplateSelector VisualStateManager.GoToState(Me, "Full", False) Exit Select Case ApplicationViewState.Snapped ' あまりスペースがないので、デフォルトの DaySlotTemplateSelector を使用します Calendar.Height = 400 Calendar.DaySlotTemplateSelector = TryCast(Resources("SmallDaySlotTemplateSelector"), DataTemplateSelector) VisualStateManager.GoToState(Me, "Snapped", False) Exit Select Case ApplicationViewState.FullScreenPortrait Calendar.DaySlotTemplateSelector = DayTemplateSelector VisualStateManager.GoToState(Me, "Portrait", False) Exit Select Case Else Return End Select Calendar.UpdateLayout() End Sub ''' <summary> ''' このページが Frame に表示されるときに呼び出されます。 ''' </summary> ''' <param name="e">このページにどのように到達したかを説明するイベントデータ。 ''' Parameter プロパティは通常、ページの構成に使用されます。</param> Protected Overrides Sub OnNavigatedTo(e As NavigationEventArgs) UpdateViewState() _loaded = True End Sub Protected Overrides Sub OnNavigatedFrom(e As NavigationEventArgs) _loaded = False MyBase.OnNavigatedFrom(e) End Sub |
C# コードの書き方
C# |
コードのコピー
|
---|---|
void Calendar_SelectedDateChanged(object sender, DateChangedEventArgs e) { if (Calendar.SelectedDates.Count > 0 && _boldedDays.ContainsKey(Calendar.SelectedDates[0])) { dayInfo.Text = _boldedDays[Calendar.SelectedDates[0]]; } else { dayInfo.Text = ""; } } /// <summary> /// 日付を太字にするためのカスタム DataTemplate を使用する DayTemplateSelector /// </summary> private DaySlotTemplateSelector DayTemplateSelector { get { if (_dayTemplateSelector == null) { _dayTemplateSelector = Resources["DaySlotTemplateSelector"] as DaySlotTemplateSelector; if (_dayTemplateSelector != null) { _dayTemplateSelector.BoldedDays = this._boldedDays; } } return _dayTemplateSelector; } } void Current_SizeChanged(object sender, Windows.UI.Core.WindowSizeChangedEventArgs e) { UpdateViewState(); } private void UpdateViewState() { Calendar.ClearValue(HeightProperty); switch (ApplicationView.Value) { case ApplicationViewState.Filled: Calendar.DaySlotTemplateSelector = DayTemplateSelector; VisualStateManager.GoToState(this, "Fill", false); break; case ApplicationViewState.FullScreenLandscape: Calendar.DaySlotTemplateSelector = DayTemplateSelector; VisualStateManager.GoToState(this, "Full", false); break; case ApplicationViewState.Snapped: // あまりスペースがないので、デフォルトの DaySlotTemplateSelector を使用します Calendar.Height = 400; Calendar.DaySlotTemplateSelector = Resources["SmallDaySlotTemplateSelector"] as DataTemplateSelector; VisualStateManager.GoToState(this, "Snapped", false); break; case ApplicationViewState.FullScreenPortrait: Calendar.DaySlotTemplateSelector = DayTemplateSelector; VisualStateManager.GoToState(this, "Portrait", false); break; default: return; } Calendar.UpdateLayout(); } /// <summary> /// このページが Frame に表示されるときに呼び出されます。 /// </summary> /// <param name="e">このページにどのように到達したかを説明するイベントデータ。 /// Parameter プロパティは通常、ページの構成に使用されます。</param> protected override void OnNavigatedTo(NavigationEventArgs e) { UpdateViewState(); _loaded = true; } protected override void OnNavigatedFrom(NavigationEventArgs e) { _loaded = false; base.OnNavigatedFrom(e); } |
Visual Basic コードの書き方
Visual Basic |
コードのコピー
|
---|---|
Public Class DaySlotTemplateSelector Inherits C1.Xaml.Calendar.DaySlotTemplateSelector Public BoldedDays As New Dictionary(Of DateTime, String)() Protected Overrides Function SelectTemplateCore(item As Object, container As DependencyObject) As DataTemplate Dim slot As DaySlot = TryCast(item, DaySlot) If slot IsNot Nothing AndAlso BoldedDays.ContainsKey(slot.[Date]) Then ' 日の DataTemplate に予定情報を表示できるようにタグに予定情報を格納します slot.Tag = BoldedDays(slot.[Date]) Else ' 予定情報をクリアします slot.Tag = Nothing End If If slot IsNot Nothing AndAlso Not slot.IsAdjacent AndAlso slot.DayOfWeek = DayOfWeek.Saturday Then ' 土曜日の色を設定します DirectCast(container, Control).Foreground = New SolidColorBrush(Windows.UI.Color.FromArgb(255, 0, 90, 255)) End If ' 基本クラスでは、DaySlotTemplateSelector.Resources コレクション内に定義されたカスタム DataTemplate が選択されます(MainPage.xaml ファイルを参照) Return MyBase.SelectTemplateCore(item, container) End Function End Class Public Class SmallDaySlotTemplateSelector Inherits C1.Xaml.Calendar.DaySlotTemplateSelector Protected Overrides Function SelectTemplateCore(item As Object, container As DependencyObject) As DataTemplate Dim slot As DaySlot = TryCast(item, DaySlot) If slot IsNot Nothing AndAlso Not slot.IsAdjacent AndAlso slot.DayOfWeek = DayOfWeek.Saturday Then ' 土曜日の色を設定します DirectCast(container, Control).Foreground = New SolidColorBrush(Windows.UI.Color.FromArgb(255, 0, 90, 255)) End If ' 基本クラスでは、DaySlotTemplateSelector.Resources コレクション内に定義されたカスタム DataTemplate が選択されます(MainPage.xaml ファイルを参照) Return MyBase.SelectTemplateCore(item, container) End Function End Class Public Class DayOfWeekTemplateSelector Inherits DataTemplateSelector Protected Overrides Function SelectTemplateCore(item As Object, container As DependencyObject) As DataTemplate Dim slot As DayOfWeekSlot = TryCast(item, DayOfWeekSlot) If slot IsNot Nothing AndAlso slot.DayOfWeek = DayOfWeek.Saturday Then ' 土曜日の色を設定します DirectCast(container, Control).Foreground = New SolidColorBrush(Windows.UI.Color.FromArgb(255, 0, 90, 255)) End If ' DataTemplate を変更しないでください Return Nothing End Function End Class |
C# コードの書き方
C# |
コードのコピー
|
---|---|
public class DaySlotTemplateSelector : C1.Xaml.Calendar.DaySlotTemplateSelector { public Dictionary BoldedDays = new Dictionary(); protected override DataTemplate SelectTemplateCore(object item, DependencyObject container) { DaySlot slot = item as DaySlot; if (slot != null && BoldedDays.ContainsKey(slot.Date)) { // 日の DataTemplate に予定情報を表示できるようにタグに予定情報を格納します slot.Tag = BoldedDays[slot.Date]; } else { // 予定情報をクリアします slot.Tag = null; } if (slot != null && !slot.IsAdjacent && slot.DayOfWeek == DayOfWeek.Saturday) { // 土曜日の色を設定します ((Control)container).Foreground = new SolidColorBrush(Windows.UI.Color.FromArgb(255, 0, 90, 255)); } // 基本クラスでは、DaySlotTemplateSelector.Resources コレクション内に定義されたカスタム DataTemplate が選択されます(MainPage.xaml ファイルを参照) return base.SelectTemplateCore(item, container); } } public class SmallDaySlotTemplateSelector : C1.Xaml.Calendar.DaySlotTemplateSelector { protected override DataTemplate SelectTemplateCore(object item, DependencyObject container) { DaySlot slot = item as DaySlot; if (slot != null && !slot.IsAdjacent && slot.DayOfWeek == DayOfWeek.Saturday) { // 土曜日の色を設定します ((Control)container).Foreground = new SolidColorBrush(Windows.UI.Color.FromArgb(255, 0, 90, 255)); } // 基本クラスでは、DaySlotTemplateSelector.Resources コレクション内に定義されたカスタム DataTemplate が選択されます(MainPage.xaml ファイルを参照) return base.SelectTemplateCore(item, container); } } public class DayOfWeekTemplateSelector : DataTemplateSelector { protected override DataTemplate SelectTemplateCore(object item, DependencyObject container) { DayOfWeekSlot slot = item as DayOfWeekSlot; if (slot != null && slot.DayOfWeek == DayOfWeek.Saturday) { // 土曜日の色を設定します ((Control)container).Foreground = new SolidColorBrush(Windows.UI.Color.FromArgb(255, 0, 90, 255)); } // DataTemplate を変更しないでください return null; } } |
次の「手順3:Calendar アプリケーションの実行」では、Calendar for UWP の機能について説明します。
ここまでの成果これで、C1Calendar にデータを追加できました。次の手順では、実行時の動作をいくつか確認します。