首页 > 解决方案 > 在 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);
    }
}

感谢您的帮助!莎拉

标签: c#windowsvisual-studiouwpcalendar

解决方案


写了一篇博文,这可能有助于了解如何CalendarView产生个别日子。

在您的情况下,您将需要订阅该CalendarViewDayItemChanging事件并等待它在您要查找的日期执行。CalendarViewDayItemChangingEventArgs包含一个Itemtype的属性,该属性CalendarViewDayItem又具有一个Dateproperty,您可以检查它。

一旦你有了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);
        }
    }
}

动画示例


推荐阅读