【问题标题】:Display meeting in CalendarView - Windows 10 UWP在 CalendarView 中显示会议 - Windows 10 UWP
【发布时间】:2020-10-16 03:47:42
【问题描述】:

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

现在我的问题是,是否有可能在 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# windows visual-studio uwp calendar


    【解决方案1】:

    我有 written a blogpost,这可能有助于了解 CalendarView 如何生成个别日子。

    在您的情况下,您需要订阅CalendarViewDayItemChanging 事件并等待它在您要查找的日期执行。 CalendarViewDayItemChangingEventArgs 包含 Item 类型为 CalendarViewDayItem 的属性,而该属性又具有 Date property,您可以检查它。

    一旦您有了想要调整的CalendarViewDayItem,您就可以访问它的可视化树(您可以使用VisualTreeHelper 方法)并在其中添加您自己的孩子。您还可以设置自定义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);
            }
        }
    }
    

    【讨论】:

    • 嗨,马丁,非常感谢您的回答。我尽了最大努力,但不知道如何解决我的问题……我有一个 DatePicker,我可以在其中为我的会议选择一个日期。我有一个 CalenderView。当我在 DatePicker 中选择日期时,我想在 CalenderView 中更改当天的颜色。我希望你能帮助我...... :(
    • @Sarah04 我已经用一个完整的例子以及结果的动画更新了我的答案:-)
    • 嗨马丁,谢谢你的回答。您是写了“FindDescendants”定义还是使用...导入了它?谢谢!
    • 你用“_highlightedDates.Add(Picker.Date.Date);”添加了什么? :)
    • 这只是为了说明 - 我正在向 List 添加我想要突出显示的日期。这不一定是你自己写的:-)。 FindDescendants 扩展方法来自 Windows Community Toolkit - 可以导入命名空间 - using Microsoft.Toolkit.Uwp.UI.Extensions
    猜你喜欢
    • 2018-07-14
    • 2015-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-10
    • 1970-01-01
    相关资源
    最近更新 更多