Динамическое создание расписания синхронизации вместе с сеткой и текстовыми полями - PullRequest
0 голосов
/ 12 июня 2019

Я пытаюсь создать SfSchedule динамически.Создать расписание Sf было легко, но теперь мне нужно добавить сетку и текстовые поля, чтобы воссоздать его, как оно есть в .xaml

Как иметь возможность динамически создавать DataTemplate и динамически добавлять сетки и текстовые поля?

У меня есть код в .xaml, который работает правильно, но я хочу создать его динамически.Пока что я использовал SfSchedule WeekSchedule = new SfSchedule ();и присваивать значения его свойствам, но теперь мне нужно динамически создавать SfSchedule.AppointmentTemplate и DataTemplate, вот где я пытаюсь использовать DataTemplate Data = new DataTemplate ();но он не позволяет мне добавлять сетку, прямоугольник или текстовые поля.

<syncfusion:SfSchedule ScheduleType="Month" Name="schedule"  >
   <syncfusion:SfSchedule.AppointmentTemplate>
      <DataTemplate>
         <Grid>               
            <Rectangle Fill="White" Stroke="Black" 
              StrokeThickness="3"></Rectangle>         
            <StackPanel Orientation="Horizontal">
                    <Rectangle Fill="{Binding AppointmentBackground}"  
              Width="10" ></Rectangle>
                <TextBlock 
                    HorizontalAlignment="Center" 
                    VerticalAlignment="Center" 
                    FontSize="15" 
                    Text="{Binding Subject}" 
                    Foreground="{Binding AppointmentBackground}" 
                    FontStyle="Normal"></TextBlock>
              </StackPanel>
             </Grid>
         </DataTemplate>
     </syncfusion:SfSchedule.AppointmentTemplate>
</syncfusion:SfSchedule>

C #

SfSchedule WeekSchedule = new SfSchedule();
WeekSchedule.HeaderDateFormat = "dddd dd";

DataTemplate DataTemp = new DataTemplate();

Grid firstGrid = new Grid();
DataTemp.Add(firstGrid); //This is what actually dont work, the datatemplate doesnt allow add

Rectange r1 = new Rectange();
r1.Fill = new SolidColorBrush(Colors.White);
r1.Stroke = new SolidColorBrush(Colors.Black);
r1.StrokeThickness = 3;
DataTemp.Add(r1);

WeekSchedule.AppointmentTemplate = DataTemp;
CalendarGrid.Children.Add(WeekSchedule);

Ожидаемые результаты позволят добавить Rectange и Grid кDataTemplate, который затем будет добавлен в apppointmenttemplate к расписанию.

Это в основном фиктивный код для тестирования, я хотел бы знать, возможно ли это сделать таким образом?

Спасибовы

1 Ответ

1 голос
/ 17 июня 2019

Используйте приведенный ниже фрагмент кода для решения вашей проблемы.В приведенном ниже коде мы использовали FrameworkElementFactory вместо FramWorkElement.

            DataTemplate appointmentTemplate = new DataTemplate();
            appointmentTemplate.DataType = typeof(ScheduleDaysAppointmentViewControl);
            FrameworkElementFactory grid = new FrameworkElementFactory(typeof(Grid));
            grid.SetValue(Grid.BackgroundProperty, new SolidColorBrush(Colors.Red));
            grid.SetValue(StackPanel.OrientationProperty, Orientation.Horizontal);


            FrameworkElementFactory rect = new FrameworkElementFactory(typeof(Rectangle));
            rect.SetValue(Rectangle.FillProperty, new SolidColorBrush(Colors.White));
            rect.SetValue(Rectangle.StrokeProperty, new SolidColorBrush(Colors.Black));
            rect.SetValue(Rectangle.StrokeThicknessProperty, 3d);

            grid.AppendChild(rect);
            appointmentTemplate.VisualTree = grid;
            schedule.AppointmentTemplate = appointmentTemplate;

И найдите образец для того же в ссылке ниже.

Пример: http://www.syncfusion.com/downloads/support/directtrac/general/ze/SfSchedule_WPF983671020

С уважением, МагешS

...