コード例 #1
0
        private void NewPeriodClick(object sender, RoutedEventArgs e)
        {
            Button button = (Button)sender;
            Grid   grid   = (Grid)button.Tag;
            int    length = grid.RowDefinitions.Count;

            grid.RowDefinitions.Add(new RowDefinition());
            Grid.SetRow(button, length);
            EditableText periodHeading = new EditableText()
            {
                Text       = "<New Period>",
                Background = WHITE,
                Padding    = new Thickness(2),
                Tag        = grid
            };

            periodHeading.MouseLeftButtonDown += PeriodClick;
            Border periodBorder = SetInternalBorder(periodHeading);

            periodBorder.BorderThickness = new Thickness(1, 0, 1, 1);
            grid.Insert(periodBorder, -2, 1);
            grid.Children.Add(GenerateCross(length - 1));
            int days = grid.ColumnDefinitions.Count - 2;

            for (int day = 0; day < days; day++)
            {
                Rectangle rect = new Rectangle()
                {
                    Fill = GREEN,
                    Tag  = true
                };
                rect.MouseLeftButtonDown += RectLeftClick;
                Border rectBorder = SetInternalBorder(rect);
                grid.Insert(rectBorder, -2, day + 2);
            }
        }
コード例 #2
0
        private Grid GenerateWeek(TimetableStructureWeek structureWeek)
        {
            Grid gridWeek = new Grid()
            {
                VerticalAlignment   = VerticalAlignment.Center,
                HorizontalAlignment = HorizontalAlignment.Center,
                Margin = new Thickness(0, 5, 10, 5)
            };

            Grid.SetIsSharedSizeScope(gridWeek, true);
            gridWeek.ColumnDefinitions.Add(new ColumnDefinition()
            {
                Width = new GridLength(1, GridUnitType.Auto)
            });
            gridWeek.ColumnDefinitions.Add(new ColumnDefinition()
            {
                Width = new GridLength(1, GridUnitType.Auto)
            });
            gridWeek.RowDefinitions.Add(new RowDefinition());        // set up container grid
            Border weekHeader = SetInternalBorder(new EditableText() // create the week name
            {
                Text          = structureWeek.Name,
                Background    = WHITE,
                Padding       = new Thickness(2),
                TextAlignment = TextAlignment.Center
            });

            weekHeader.BorderThickness = new Thickness(1);
            gridWeek.Insert(weekHeader, 0, 1);


            for (int day = 0; day < structureWeek.DayNames.Count; day++)
            {
                ColumnDefinition columnDay = new ColumnDefinition()
                {
                    SharedSizeGroup = "A"
                };
                gridWeek.ColumnDefinitions.Add(columnDay);

                EditableText dayHeading = new EditableText() // add the day name
                {
                    Text                = structureWeek.DayNames[day],
                    Background          = WHITE,
                    Padding             = new Thickness(2),
                    Tag                 = gridWeek,
                    HorizontalAlignment = HorizontalAlignment.Center
                };
                Border dayBorder = SetInternalBorder(dayHeading);
                dayBorder.BorderThickness = new Thickness(0, 1, 1, 1);
                gridWeek.Insert(dayBorder, 0, day + 2);
            }

            for (int period = 0; period < structureWeek.PeriodNames.Count; period++)
            {
                RowDefinition rowPeriod = new RowDefinition()
                {
                    //Height = new GridLength(1, GridUnitType.Star)
                };
                gridWeek.RowDefinitions.Add(rowPeriod);
                EditableText periodHeading = new EditableText() // add the period names
                {
                    Text       = structureWeek.PeriodNames[period],
                    Background = WHITE,
                    Padding    = new Thickness(2),
                    Tag        = gridWeek
                };
                Border periodBorder = SetInternalBorder(periodHeading);
                periodBorder.BorderThickness = new Thickness(1, 0, 1, 1);
                gridWeek.Insert(periodBorder, period + 1, 1);
                gridWeek.Children.Add(GenerateCross(period + 1));
                for (int day = 0; day < structureWeek.DayNames.Count; day++)
                {
                    bool      schedulable = structureWeek.PeriodIsSchedulable(day, period);
                    Rectangle rect        = new Rectangle() // add the individual period
                    {
                        Fill = schedulable ? GREEN : A8GRAY,
                        Tag  = schedulable
                    };
                    rect.MouseLeftButtonDown += RectLeftClick;
                    rect.MouseEnter          += MouseEntered; // add the appropriate mouse bindings
                    Border rectBorder = SetInternalBorder(rect);
                    gridWeek.Insert(rectBorder, period + 1, day + 2);
                }
            }
            Button newPeriod = new Button() // add the button that adds a new period
            {
                Content = new Image()
                {
                    Source = (ImageSource)Application.Current.Resources["PlusIcon"]
                },
                Tag = gridWeek,
                VerticalAlignment   = VerticalAlignment.Center,
                HorizontalAlignment = HorizontalAlignment.Center,
                Height = 20,
                Margin = new Thickness(5)
            };

            newPeriod.Click += NewPeriodClick;
            gridWeek.RowDefinitions.Add(new RowDefinition()
            {
                Height = new GridLength(1, GridUnitType.Auto)
            });
            gridWeek.Insert(newPeriod, -1, 0);
            Image removeWeek = new Image() // add the image that removes the week
            {
                Source = (ImageSource)Application.Current.Resources["BlackBinIcon"],
                HorizontalAlignment = HorizontalAlignment.Center,
                Height = 30,
                Cursor = Cursors.Hand
            };

            Grid.SetColumnSpan(removeWeek, structureWeek.DayNames.Count + 1);
            gridWeek.Insert(removeWeek, -1, 1);
            removeWeek.MouseDown += RemoveWeekClick;
            return(gridWeek);
        }