Megosztás a következőn keresztül:


Naptár nézet

A naptárnézetekkel a felhasználók megtekinthetik és kezelhetik azokat a naptárakat, amelyeket hónap, év vagy évtized szerint navigálhatnak. A felhasználók egyetlen dátumot vagy dátumtartományt választhatnak. Nincs választófelület, és a naptár mindig látható.

Ez a megfelelő vezérlő?

Naptárnézet használatával a felhasználók egyetlen dátumot vagy dátumtartományt választhatnak ki egy mindig látható naptárból.

Ha egy felhasználónak egyszerre több dátumot kell kijelölnie, naptárnézetet kell használnia. Ha azt szeretné, hogy a felhasználó csak egyetlen dátumot válasszon, és nincs szüksége naptárra, hogy mindig látható legyen, érdemes lehet naptárdátumválasztót vagy dátumválasztó vezérlőelemet használnia.

A megfelelő vezérlőelem kiválasztásáról további információt a Dátum- és idővezérlők című cikkben talál.

Példák

A naptárnézet 3 különálló nézetből áll: a hónap nézetből, az évnézetből és az évtized nézetből. Alapértelmezés szerint a hónap nézet megnyitásakor kezdődik. Az indítási nézetet a DisplayMode tulajdonság beállításával adhatja meg.

A naptárnézet 3 nézete

A felhasználók a hónap nézetben a fejlécre kattintva nyithatják meg az év nézetet, az év nézetben pedig az élőfejre kattintva nyithatják meg az évtized nézetet. A felhasználók az évtized nézetben kiválasztanak egy évet, hogy visszatérjenek az év nézethez, és az év nézetben válasszon egy hónapot a hónap nézethez való visszatéréshez. A fejléc oldalára mutató két nyíl hónap, év vagy évtized szerint halad előre vagy hátra.

Naptárnézet létrehozása

WinUI 3 Katalógus ikon A WinUI 3 Katalógus alkalmazás interaktív példákat tartalmaz a WinUI vezérlőire és funkcióira. Kérje le az alkalmazást a Microsoft Áruházból vagy keresse meg a forráskódot a GitHub webhelyen.

Ez a példa bemutatja, hogyan hozhat létre egyszerű naptárnézetet.

<CalendarView/>

Az eredményként kapott naptárnézet a következőképpen néz ki:

Példa a naptár nézetre

Dátumok kiválasztása

Alapértelmezés szerint a SelectionMode tulajdonság egyetlen értékre van állítva. Ez lehetővé teszi, hogy a felhasználó egyetlen dátumot válasszon a naptárban. A kijelölés letiltásához állítsa a SelectionMode értéket Nincs értékre.

Állítsa be a SelectionMode-ot "Többszörös " módra, hogy a felhasználó kiválasszon több dátumot. Több dátumot is kijelölhet programozott módon, ha DateTime/DateTimeOffset objektumokat ad hozzá a SelectedDates gyűjteményhez, ahogy az itt látható:

calendarView1.SelectedDates.Add(DateTimeOffset.Now);
calendarView1.SelectedDates.Add(new DateTime(1977, 1, 5));

A felhasználók a naptárrácson kattintással vagy koppintással törölhetik a kijelölt dátum kijelölését.

Kezelheti a SelectedDatesChanged eseményt , hogy értesítést kapjon a SelectedDates gyűjtemény módosításakor.

Megjegyzés:

A dátumértékekkel kapcsolatos fontos információkért tekintse meg a DateTime és a Naptár értékeket a Dátum és idő vezérlőelemek című cikkben.

A naptárnézet megjelenésének testreszabása

A naptárnézet a ControlTemplate-ban definiált XAML-elemekből és a vezérlő által közvetlenül renderelt vizuális elemekből áll.

  • A vezérlősablonban definiált XAML-elemek tartalmazzák a vezérlőt, a fejlécet, az előző és a következő gombokat, valamint a DayOfWeek elemeket tartalmazó szegélyt. Ezeket az elemeket bármilyen XAML-vezérlőhez hasonlóan formázhatja és újrasablonolhatja.
  • A naptárrácsot a CalendarViewDayItem objektumok alkotják. Ezeket az elemeket nem lehet stílusra vagy újrasablonozásra használni, de a különböző tulajdonságok lehetővé teszik a megjelenésük testreszabását.

Ez az ábra a naptár havi nézetét alkotó elemeket mutatja be. További információ: Megjegyzések a CalendarViewDayItem osztályban.

A naptári hónap nézet elemei

Ez a táblázat felsorolja a naptárelemek megjelenésének módosításához módosítható tulajdonságokat.

Elem Tulajdonságok
DayOfWeek DayOfWeekFormat
NaptárElem CalendarItemBackground, CalendarItemBorderBrush, CalendarItemBorderThickness, CalendarItemForeground
Napi tétel NapiElemBetűcsalád, NapiElemBetűméret, NapiElemBetűstílus, NapiElemBetűsúly, VízszintesNapiElemIgazítás, FüggőlegesNapiElemIgazítás, NaptárnézetNapiElemStílus
MonthYearItem (év- és évtizednézetekben, a DayItem-nek megfelelő) MonthYearItemFontFamily, MonthYearItemFontSize, MonthYearItemFontStyle, MonthYearItemFontWeight
A hónap első napja címke FirstOfMonthLabelFontFamily, FirstOfMonthLabelFontSize, FirstOfMonthLabelFontStyle, FirstOfMonthLabelFontWeight, HorizontalFirstOfMonthLabelAlignment, VerticalFirstOfMonthLabelAlignment, IsGroupLabelVisible
FirstofYearDecadeLabel (év- és évtizednézetekben, a FirstOfMonthLabel-nek megfelelő) FirstOfYearDecadeLabelFontFamily, FirstOfYearDecadeLabelFontSize, FirstOfYearDecadeLabelFontStyle, FirstOfYearDecadeLabelFontWeight
Vizualizációs állapotszegélyek FocusBorderBrush, HoverBorderBrush, PressedBorderBrush, SelectedBorderBrush, SelectedForeground, SelectedHoverBorderBrush, SelectedPressedBorderBrush
Hatókörön kívül IsOutOfScopeEnabled, OutOfScopeBackground, OutOfScopeForeground
Ma IsTodayHighlighted, TodayFontWeight, TodayForeground

Alapértelmezés szerint a havi nézet egyszerre 6 hetet jelenít meg. A Hetek száma a NumberOfWeeksInView tulajdonság beállításával módosítható. A megjelenítendő hetek minimális száma 2; a maximális érték 8.

Alapértelmezés szerint az év- és évtizednézetek egy 4x4-es rácsban jelennek meg. A sorok vagy oszlopok számának módosításához hívja meg a SetYearDecadeDisplayDimensions függvényt a kívánt sorok és oszlopok számával. Ez az év- és évtizednézetek rácsát is megváltoztatja.

Itt az év- és évtizednézetek egy 3x4-es rácsban jelennek meg.

calendarView1.SetYearDecadeDisplayDimensions(3, 4);

Alapértelmezés szerint a naptárnézetben látható minimális dátum az aktuális dátum előtt 100 év, a megjelenített maximális dátum pedig 100 évvel korábbi az aktuális dátumon. A naptár minimális és maximális dátumait a MinDate és a MaxDate tulajdonságok beállításával módosíthatja .

calendarView1.MinDate = new DateTime(2000, 1, 1);
calendarView1.MaxDate = new DateTime(2099, 12, 31);

Naptári nap elemeinek frissítése

A naptár minden napját egy CalendarViewDayItem objektum jelöli. Az egyes napidők eléréséhez és tulajdonságainak és metódusainak használatához kezelje a CalendarViewDayItemChanging eseményt, és használja az esemény argumentumainak Elem tulajdonságát a CalendarViewDayItem eléréséhez.

A Naptár nézetben egy nap nem választható ki, ha a CalendarViewDayItem.IsBlackout tulajdonságot igazra állítja.

A CalendarViewDayItem.SetDensityColors metódus meghívásával környezeti információkat jeleníthet meg az események sűrűségéről egy napban. Minden nap 0–10 sűrűségsávot jeleníthet meg, és beállíthatja az egyes sávok színét.

Íme néhány napi elem a naptárban. Az 1. és a 2. nap elsötétült. A 2., 3. és 4. nap különböző sűrűségsávokkal rendelkezik.

Naptári napok sűrűségsávokkal

Fázisos renderelés

A naptárnézetek számos CalendarViewDayItem objektumot tartalmazhatnak. A felhasználói felület rugalmasan kezelhető és zökkenőmentes navigálást biztosít a naptárban, a naptárnézet támogatja a szakaszos megjelenítést. Ez lehetővé teszi, hogy egy napi feladat feldolgozását fázisokra bontsa. Ha egy nap elmozdul a nézetből, mielőtt az összes fázis befejeződik, a rendszer nem használ több időt az elem feldolgozására és megjelenítésére.

Ez a példa egy naptárnézet szakaszos megjelenítését mutatja be a találkozók ütemezéséhez.

  • A nulladik fázisban az alapértelmezett napi elem jelenik meg.
  • Az 1. fázisban megjelöli a nem foglalható dátumokat. Ide tartoznak a korábbi dátumok, a vasárnapok és a már foglalt dátumok.
  • A 2. fázisban minden olyan találkozót ellenőriz, amely az adott napra van lefoglalva. Minden megerősített találkozóhoz zöld sűrűségsávot és minden feltételes találkozóhoz kék sűrűségsávot jelenít meg.

A példában szereplő Bookings osztály egy fiktív találkozófoglalási alkalmazásból származik, és nem jelenik meg.

<CalendarView CalendarViewDayItemChanging="CalendarView_CalendarViewDayItemChanging"/>
private void CalendarView_CalendarViewDayItemChanging(CalendarView sender,
                                   CalendarViewDayItemChangingEventArgs args)
{
    // Render basic day items.
    if (args.Phase == 0)
    {
        // Register callback for next phase.
        args.RegisterUpdateCallback(CalendarView_CalendarViewDayItemChanging);
    }
    // Set blackout dates.
    else if (args.Phase == 1)
    {
        // Blackout dates in the past, Sundays, and dates that are fully booked.
        if (args.Item.Date < DateTimeOffset.Now ||
            args.Item.Date.DayOfWeek == DayOfWeek.Sunday ||
            Bookings.HasOpenings(args.Item.Date) == false)
        {
            args.Item.IsBlackout = true;
        }
        // Register callback for next phase.
        args.RegisterUpdateCallback(CalendarView_CalendarViewDayItemChanging);
    }
    // Set density bars.
    else if (args.Phase == 2)
    {
        // Avoid unnecessary processing.
        // You don't need to set bars on past dates or Sundays.
        if (args.Item.Date > DateTimeOffset.Now &&
            args.Item.Date.DayOfWeek != DayOfWeek.Sunday)
        {
            // Get bookings for the date being rendered.
            var currentBookings = Bookings.GetBookings(args.Item.Date);

            List<Color> densityColors = new List<Color>();
            // Set a density bar color for each of the days bookings.
            // It's assumed that there can't be more than 10 bookings in a day. Otherwise,
            // further processing is needed to fit within the max of 10 density bars.
            foreach (booking in currentBookings)
            {
                if (booking.IsConfirmed == true)
                {
                    densityColors.Add(Colors.Green);
                }
                else
                {
                    densityColors.Add(Colors.Blue);
                }
            }
            args.Item.SetDensityColors(densityColors);
        }
    }
}