CalendarViewDayItemChanging事件没有反应?

时间:2016-04-24 10:18:15

标签: c# xaml win-universal-app windows-10 windows-10-universal

我在Windows 10 Universal App中有一个CalendarView。当用户更改日期项目时,我想打开一个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>

enter image description here

1 个答案:

答案 0 :(得分:1)

首先,你必须知道在加载CalendarView时调用事件“CalendarViewDayItemChanging”: enter image description here

这是官方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()”方法。

希望这会对你有所帮助。