CalendarViewDayItemChanging 事件没有反应?

CalendarViewDayItemChanging event doesn´t react?

我在 Windows 10 通用应用程序中有一个 CalendarView。当用户更改 Day Item 时,我想打开一个 ContentDialog。但是这个代码什么也做不了。 ContentDialog、StackPanel 和 TextBlock 当然声明为全局变量。有谁知道为什么?

.xaml.cs

namespace SchlachterFliesen
{
    /// <summary>
    /// Eine leere Seite, die eigenständig verwendet oder zu der innerhalb eines Rahmens navigiert werden kann.
    /// </summary>
    public sealed partial class Plan : Page
    {

        private TextBlock aufgaben;
        private ContentDialog dialog;
        private StackPanel panel;

        public Plan()
        {
            this.InitializeComponent();
        }


        protected override void OnNavigatedTo(NavigationEventArgs e)
        {
            base.OnNavigatedTo(e);
            var currentView = SystemNavigationManager.GetForCurrentView();
            currentView.AppViewBackButtonVisibility = AppViewBackButtonVisibility.Visible;
            currentView.BackRequested += backButton_Tapped; 
        }

        private void backButton_Tapped(object sender, BackRequestedEventArgs e)
        {
            var rootFrame = Window.Current.Content as Frame;
            var mainPage = rootFrame.Content as MainPage;
            rootFrame.Navigate(typeof(MainPage));
        }


        private void aufgabenGeladen(Aufgabe[] antwort)
        {
            for(int i = 0; i < antwort.Length - 1; i++)
            {
                aufgaben.Text += antwort[i].beschreibung;  
            }
        }

        private async void kalender_SelectedDatesChanged(CalendarView sender, CalendarViewSelectedDatesChangedEventArgs args)
        {
            dialog = new ContentDialog();

            var culture = new System.Globalization.CultureInfo("de-DE");

            dialog.Title = "Am " + args.AddedDates[0].LocalDateTime.ToString() + " Sind Sie, " + Daten.LadeAktuellenBenutzer()?.mitarbeiter.vorname + " " + Daten.LadeAktuellenBenutzer()?.mitarbeiter.name + ", eingeteilt: ";
            dialog.MaxWidth = this.ActualWidth;



            panel = new StackPanel();


            aufgaben = new TextBlock();
            aufgaben.Text = "Sie haben an diesem Tag folgendes zu tun:\n";
            aufgaben.TextWrapping = TextWrapping.Wrap;

            //Daten.LadeAufgabenByMitarbeiter((int)Daten.LadeAktuellenBenutzer()?.mitarbeiter.id, new Daten.Ziel<Aufgabe[]>(aufgabenGeladen));


            panel.Children.Add(aufgaben);




            await dialog.ShowAsync();
        }
    }
}

.xaml

        <CalendarView Name="kalender" Grid.Row="1" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" SelectionMode="Single" SelectedDatesChanged="kalender_SelectedDatesChanged"></CalendarView>

首先你必须知道事件 "CalendarViewDayItemChanging" 在加载 CalendarView 时被调用:

这是 MSDN 官方文档:

MSDN CalendarView documentation

要获取所选日期并显示 ContentDialog,您必须使用 "SelectedDatesChanged" 事件。

我已经更改了你的代码,现在它应该像下面 XAML:

更新:

<CalendarView Name="kalender" Grid.Row="1" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" SelectionMode="Single" SelectedDatesChanged="kalendar_SelectedDatesChanged"></CalendarView>

C# 代码:

private async void kalendar_SelectedDatesChanged(CalendarView sender, CalendarViewSelectedDatesChangedEventArgs args)
    {
        dialog = new ContentDialog();
        dialog.Title = args.AddedDates[0].Date.ToString() + "    " + Daten.LadeAktuellenBenutzer()?.mitarbeiter.vorname + " " + Daten.LadeAktuellenBenutzer()?.mitarbeiter.name;
        dialog.MaxWidth = this.ActualWidth;

        panel = new StackPanel();

        aufgaben = new TextBlock();
        aufgaben.Text = "Sie haben an diesem Tag folgendes zu tun:\n";
        aufgaben.TextWrapping = TextWrapping.Wrap;


        panel.Children.Add(aufgaben);

        await dialog.showAsync();
    }

现在您可以获取日期(也可以只选择日、月或年并显示联系对话框)。记得使用"dialog.showAsync()"方法。

希望对您有所帮助。