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()"方法。
希望对您有所帮助。
我在 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()"方法。
希望对您有所帮助。