我在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>
答案 0 :(得分:1)
首先,你必须知道在加载CalendarView时调用事件“CalendarViewDayItemChanging”:
这是官方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()”方法。
希望这会对你有所帮助。