c# - 在 CalendarView 中显示会议 - Windows 10 UWP
问题描述
我是 Windows 10 UWP-Apps 的新手,并尝试创建一个日历应用程序。在我的页面上,用户可以创建会议。在这里,我有两个用于标题和位置的文本框以及一个日期选择器。使用 (speichern-) 安全按钮,您可以保存会议。
现在我的问题是,是否有可能在 CalendarView 中看到会议?我试图弄清楚 CalendarView 中的一天如何通过创建会议来获得点符号。如果用户点击这一天,他可以看到会议信息。
private void btnSpeichern_Click(object sender, RoutedEventArgs e)
{
TerminAnlegen();
showDialog("Termin wurde hinzugefügt.");
}
public async void TerminAnlegen()
{
StorageFolder Ordner = ApplicationData.Current.LocalFolder;
StorageFile Datendatei = await Ordner.CreateFileAsync("kalender.txt", CreationCollisionOption.ReplaceExisting);
string Daten = tbTitel.Text + ", " + tbOrt.Text + ", " + datePicker.Date;
if(Daten != "")
{
await FileIO.WriteTextAsync(Datendatei, Daten);
}
}
感谢您的帮助!莎拉
解决方案
我写了一篇博文,这可能有助于了解如何CalendarView
产生个别日子。
在您的情况下,您将需要订阅该CalendarViewDayItemChanging
事件并等待它在您要查找的日期执行。CalendarViewDayItemChangingEventArgs
包含一个Item
type的属性,该属性CalendarViewDayItem
又具有一个Date
property,您可以检查它。
一旦你有了CalendarViewDayItem
你想要调整的,你可以访问它的可视化树(你可以使用VisualTreeHelper
方法)并在其中添加你自己的孩子。您还可以设置自定义ControlTemplate
以在“日期”之上呈现自定义内容。
注意 - 如果您需要在日期已经呈现后添加自定义,您也可以通过在的可视化树中CalendarView
搜索CalendarViewDayItem
类型来执行此操作。CalendarView
您可能会发现Windows Community Toolkit中的Visual Tree Extensions很有用 :-)。
完整示例
XAML:
<StackPanel>
<DatePicker x:Name="Picker" />
<Button Click="Button_Click">Add</Button>
<CalendarView CalendarViewDayItemChanging="Calendar_CalendarViewDayItemChanging" x:Name="Calendar" />
</StackPanel>
C#:
public sealed partial class MainPage : Page
{
public MainPage()
{
this.InitializeComponent();
}
private List<DateTimeOffset> _highlightedDates = new List<DateTimeOffset>();
private void Button_Click(object sender, RoutedEventArgs e)
{
_highlightedDates.Add(Picker.Date.Date);
UpdateCalendar();
}
private void UpdateCalendar()
{
var displayedDays = Calendar.FindDescendants<CalendarViewDayItem>();
foreach (var displayedDay in displayedDays)
{
if (_highlightedDates.Contains(displayedDay.Date.Date))
{
//highlight
displayedDay.Background = new SolidColorBrush(Colors.Red);
}
}
}
private void Calendar_CalendarViewDayItemChanging(CalendarView sender, CalendarViewDayItemChangingEventArgs args)
{
if (_highlightedDates.Contains(args.Item.Date))
{
//highlight
args.Item.Background = new SolidColorBrush(Colors.Red);
}
}
}