4

これが可能かどうかはわかりませんが、wpf datepickerで選択可能な日付のリストのみを作成することは可能ですか?

使用が特定の日付からのみ選択できることを確認する必要があります。ドロップダウンリストを使用してこれを行うことができますが、日付ピッカーを使用すると、はるかに優れたものになります。

何か案は?

4

3 に答える 3

9

DatePickerは、選択可能な日付を制御するための次のプロパティがあります。

DisplayDateStartCalendar :ポップアップに含める最初の日付。
DisplayDateEndCalendar :ポップアップに含める最後の日付。

したがって、許可された日付を含むリストがある場合は、リストDisplayDateStartの最初の項目とリストDisplayDateEndの最後の項目に設定できます。

これにより、ユーザーはその範囲外の日付を選択できなくなります。

許可された日付のリストにギャップが含まれている場合を処理するために、BlackoutDatesプロパティを使用して日付の範囲を選択できないようにすることができます。

したがって、リストに黒く塗りつぶされていない日付を追加するには、次のようにします。

リスト内の日付のみがカレンダーポップアップに表示され、リストにない日付は黒く塗りつぶされているため、選択できません。

var dates = new List<DateTime>
{
    new DateTime(2013, 1, 5),
    new DateTime(2013, 1, 6),
    new DateTime(2013, 1, 7),
    new DateTime(2013, 1, 8),
    new DateTime(2013, 1, 15),
    new DateTime(2013, 1, 16),
    new DateTime(2013, 1, 28),
    new DateTime(2013, 1, 29),
    new DateTime(2013, 2, 9),
    new DateTime(2013, 2, 12),
    new DateTime(2013, 2, 13),
    new DateTime(2013, 2, 17),
    new DateTime(2013, 2, 18)
};

var firstDate = dates.First();
var lastDate = dates.Last();
var dateCounter = firstDate;

foreach (var d in dates.Skip(1))
{
    if (d.AddDays(-1).Date != dateCounter.Date)
    {
        dtp.BlackoutDates.Add(
            new CalendarDateRange(dateCounter.AddDays(1), d.AddDays(-1)));
    }

    dateCounter = d;
}

dtp.DisplayDateStart = firstDate;
dtp.DisplayDateEnd = lastDate;

許可された日付が非常に離れている場合、日付の90%が黒く塗りつぶされるのはかなり面倒なので、これはおそらくあまりユーザーフレンドリーではありません。その場合は、ComboBoxより良いかもしれません。

于 2013-02-18T09:21:25.360 に答える
4

BlackoutDatesコレクションを使用して、ユーザーが避けたいすべての日付を選択できないようにするために、必要なことを行うことができます。

コード:

myDatePicker.BlackoutDates.Add(myCalendarDateRange);

XAML:

<DatePicker Name="myDatePicker">
    <DatePicker.BlackoutDates>
        <CalendarDateRange Start="02.20.2013" End="02.22.2013" />
    </DatePicker.BlackoutDates>
</DatePicker>
于 2013-02-18T09:08:04.043 に答える
0

独自のControlTemplateを作成する必要があります。最も簡単な方法は、デフォルトのテンプレート(以下のURLからダウンロードできます)を使用して、必要な部分を変更することです。

http://archive.msdn.microsoft.com/wpfsamples#themes

于 2013-02-18T09:09:20.300 に答える