private static async Task<FrameworkElement> LoadElementAsync(string templatePath, TileModel model, Border host)
        {
            var templateFile = await Package.Current.InstalledLocation.GetFileAsync(templatePath);
            var template = await FileIO.ReadTextAsync(templateFile);
            var element = (Border)XamlReader.Load(template);
            element.Background = new SolidColorBrush(Color.FromArgb(0, 0, 0, 0));
            element.DataContext = model;

            if (host != null)
            {
                host.Child = element;
            }

            return element;
        }
        public static async Task<TileModel> BuildTileModelAsync(TileSettings settings)
        {
            var model = new TileModel();

            var now = DateTimeOffset.Now;

            var appointmentStore = await AppointmentManager.RequestStoreAsync(AppointmentStoreAccessType.AllCalendarsReadOnly);
            var appointments = await appointmentStore.FindAppointmentsAsync(now, TimeSpan.FromDays(settings.DayCount));

            var appointmentFilter = CreateAppointmentFilter(settings);

            var filteredAppoinments = appointments.OrderBy(a => a.StartTime).Where(appointmentFilter).Take(settings.AppointmentCount).ToArray();

            if (filteredAppoinments.Length > 0)
            {
                var appointmentText = GetAppointmentText(filteredAppoinments[0], settings);
                model.Appointment1Name = appointmentText.Item1;
                model.Appointment1DateTime = appointmentText.Item2;
            }

            if (filteredAppoinments.Length > 1)
            {
                var appointmentText = GetAppointmentText(filteredAppoinments[1], settings);
                model.Appointment2Name = appointmentText.Item1;
                model.Appointment2DateTime = appointmentText.Item2;
            }

            if (filteredAppoinments.Length > 2)
            {
                var appointmentText = GetAppointmentText(filteredAppoinments[2], settings);
                model.Appointment3Name = appointmentText.Item1;
                model.Appointment3DateTime = appointmentText.Item2;
            }

            model.Day = now.Day.ToString();
            model.DayOfWeek = DateTimeFormatInfo.CurrentInfo.AbbreviatedDayNames[(int)now.DayOfWeek];

            return model;
        }
 public static async Task GenerateWideTileImageFileAsync(TileModel model, Border host)
 {
     var element = await LoadElementAsync(Constants.WideTileTemplateFilePath, model, host);
     await GenerateImageFileAsync(Constants.WideTileImageFileName, element, new Size(310, 150));
 }