在 CalendarView 中显示会议 - Windows 10 UWP

Display meeting in CalendarView - Windows 10 UWP

我是 Windows 10 UWP-Apps 的新手,我尝试创建一个日历应用程序。 在我的页面上,用户可以创建会议。这里我有两个标题和位置的文本框和一个日期选择器。 使用 (speichern-)safe-button 您可以保存会议。

现在我的问题是,是否有可能在 CalendarView 中看到会议?我试图弄清楚,CalendarView 中的一天如何通过创建会议获得 point-symbol。如果用户点击这一天,他可以看到 meeting-information.

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);
    }
}

感谢您的帮助! 莎拉

我有 written a blogpost 这可能有助于理解 CalendarView 如何生成单独的天数。

在您的情况下,您需要订阅 CalendarViewDayItemChanging 事件并等待它在您要查找的日期执行。 CalendarViewDayItemChangingEventArgs 包含类型 CalendarViewDayItemItem 属性,它又包含一个 Date property,您可以检查它。

一旦有了要调整的 CalendarViewDayItem,就可以访问它的可视化树(可以使用 VisualTreeHelper 方法)并在其中添加自己的 child。您还可以设置自定义 ControlTemplate 以在“日期”之上呈现自定义内容。

注意 - 如果您需要在呈现 CalendarView 日期之后添加自定义,您也可以通过在 CalendarView 中搜索 CalendarViewDayItem 类型来实现视觉树。

您可能会发现 Windows 社区工具包中的 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);
        }
    }
}