表示期間の指定は XamScheduleView の VisibleDates プロパティに対して表示させたい日付の追加でできます。例えば表示期間を今月としたい場合は、次のようなコードになります。
var today = DateTime.Today; // 今日の日付 var firstDayOfMonth = new DateTime(DateTime.Today.Year, DateTime.Today.Month, 1); // 今月の1日の日付 int daysThisMonth = DateTime.DaysInMonth(DateTime.Today.Year, DateTime.Today.Month); // 今月の日数 // VisibleDates の Clear メソッドを実行後、AddRange で表示期間を設定します。 this.xamScheduleView1.VisibleDates.Clear(); this.xamScheduleView1.VisibleDates.AddRange(firstDayOfMonth, firstDayOfMonth.AddDays(daysThisMonth - 1), true);
特定日付にスクロールする場合は、XamScheduleView には該当するメソッドがないので、ScrollBar の仕様に従って自分で ScrollBar の Value 値を計算して設定する必要があります(※算数や数学の考え方が必要になってきます)。例えば XamScheduleView オブジェクトとスクロール先の DateTime を受け取り、XamScheduleView をスクロールさせるメソッドは以下のようになります。
private void ScrollToTime(XamScheduleView scheduleView, DateTime dtScrollTo) { // スクロールバーを取得する。取得できなかったら何もしない。 // https://jp.infragistics.com/help/wpf/infragisticswpf~infragistics.windows.utilities~getdescendantfromname var scrollBar = Infragistics.Windows.Utilities.GetDescendantFromName(scheduleView, "TimeslotScrollBar") as ScrollBar; if (scrollBar == null) return; // Primaryの時刻表示のヘッダーを取得する。取得できなかったら何もしない。 var headerArea = Infragistics.Windows.Utilities.GetDescendantFromName(scheduleView, "PrimaryTimeZone") as ScheduleViewTimeslotHeaderArea; if(headerArea == null) return; // Primaryの時刻表示の最初のIntervalを取得する。取得できなかったら何もしない。 var header = Infragistics.Windows.Utilities.GetDescendantFromType(scheduleView, typeof(ScheduleViewTimeslotHeader), false) as ScheduleViewTimeslotHeader; if(header == null) return; // 表示領域のIntervalの数を計算 double intervalsInView = (double)headerArea.ActualWidth / (double)header.ActualWidth; // Primaryの時刻表示のIntervalを時間の単位で取得 double interval = scheduleView.TimeslotInterval.TotalHours; // スクロール先の時間を設定(単位: 時間) TimeSpan scrollToTimeSpan = dtScrollTo - scheduleView.VisibleDates.Min(); double scrollTo = scrollToTimeSpan.TotalHours; // スクロールバーの位置(newOffset)を計算 // 分母(denominator): スクロール領域の全Interval数 - View領域のIntervalの数。 // 分子(numerator): スクロール先の時間までのInterval数 // ※Intervalの数は設定によって異なりますので、実際の実装内容に沿った修正が必要になる場合があります。 double denominator = (scheduleView.VisibleDates.Count * 24.0 / interval) - intervalsInView; // 1日当たり24時間表示されている(※既定)と仮定。 double numerator = scrollTo / interval; // 0時から表示されている(※既定)と仮定 double newOffset = numerator / denominator; if (newOffset > 1.0) newOffset = 1.0; // スクロールバーの位置を設定 // ※この計算式自体は、ScrollBar開発元のマイクロソフトのサイトなどでご確認ください。 scrollBar.Value = newOffset * (scrollBar.Maximum - scrollBar.Minimum); }
実装例
API リファレンス
- VisibleDates プロパティ
サンプル