Exemple #1
0
        public StudentPassTest(ClientObject cl, int testId, Window _mw, Frame _mn, StudentTests previousPage)
        {
            InitializeComponent();
            client        = cl;
            mw            = _mw;
            main          = _mn;
            _previousPage = previousPage;
            _userAnswers  = new List <DTOAnswer>();
            dtoTest       = client.GetTest(testId);
            questions     = client.GetQuestions(testId);
            questionType  = client.GetQuestionTypes();
            _testSession  = new DTOTestSession()
            {
                Status = "Continues", StartTime = DateTime.Now, TestId = testId, StudentId = cl.GetClientId()
            };

            Thread.Sleep(500);
            _testSession.TestSessionId = client.AddTestSession(_testSession);

            //IGNORE comments.
            //1. add grid with one column
            //2. add two  containers vertically
            //3. add question text to uppersection
            //4. add container horisontal
            //5. add two containers in both container from step 4.
            //6. paiste horisontal container
            //7. add answer option with certain type.
            var mainStack = new StackPanel();

            mainStack.HorizontalAlignment = HorizontalAlignment.Left;
            var listOfStackPanels = new List <StackPanel>();

            var testNameStacPanel = new StackPanel();
            var testName          = new TextBlock();

            testName.FontSize   = 15;
            testName.FontFamily = new FontFamily("Century Gothic");
            testName.Text       = dtoTest.TestName;
            testNameStacPanel.Children.Add(testName);
            listOfStackPanels.Add(testNameStacPanel);

            int i = 0;

            foreach (var question in questions)
            {
                // Answers logic
                answerDictionary.Add(i, "");

                //
                //questionLogic
                var stackQuestion = new StackPanel();
                stackQuestion.Margin = new Thickness()
                {
                    Bottom = 20, Left = 10, Right = 0, Top = 0
                };
                var stackQuestionText = new StackPanel();
                var stackOptions      = new StackPanel();
                var textElement       = new TextBlock();
                textElement.Text = (i + 1).ToString() + ". " + question.QuestionText;
                stackQuestionText.Children.Add(textElement);
                var options = question.AnswerOption?.Split(';');
                if (options != null && options.Length != 0)
                {
                    if (question.QuestionTypeId == 1)
                    {
                        for (int k = 0; k < options.Length; k++)
                        {
                            RadioButton rb = new RadioButton()
                            {
                                Content = " " + options[k], IsChecked = i != 0
                            };
                            rb.Checked += (sender, args) =>
                            {
                                answerDictionary[(int)((System.Windows.FrameworkElement)sender).Tag] = ((System.Windows.Controls.ContentControl)args.Source).Content.ToString();
                            };
                            rb.Unchecked += (sender, args) => { /* Do nothing */ };
                            rb.Tag        = i;
                            rb.IsChecked  = false;
                            mainStackPanel.HorizontalAlignment = HorizontalAlignment;
                            stackOptions.Children.Add(rb);
                        }
                    }
                    else
                    {
                        if (question.QuestionTypeId == 2)
                        {
                            for (int k = 0; k < options.Length; k++)
                            {
                                CheckBox rb = new CheckBox()
                                {
                                    Content = " " + options[k], IsChecked = i != 0
                                };
                                rb.Checked += (sender, args) =>
                                {
                                    if (string.IsNullOrEmpty(answerDictionary[(int)((System.Windows.FrameworkElement)sender).Tag]))
                                    {
                                        answerDictionary[(int)((System.Windows.FrameworkElement)sender).Tag] = ((System.Windows.Controls.ContentControl)args.Source).Content.ToString();
                                    }
                                    else
                                    {
                                        answerDictionary[(int)((System.Windows.FrameworkElement)sender).Tag] += " ; " + ((System.Windows.Controls.ContentControl)args.Source).Content.ToString();
                                    }
                                };
                                rb.Unchecked += (sender, args) => {
                                    /* Do stuff */
                                    var      multipleAnswers   = answerDictionary[(int)((System.Windows.FrameworkElement)sender).Tag];
                                    string   elementToRemove   = ((System.Windows.Controls.ContentControl)args.Source).Content.ToString();
                                    string[] separatingStrings = { " ; " };
                                    var      newAnswers        = multipleAnswers.Split(separatingStrings, System.StringSplitOptions.RemoveEmptyEntries).Where(val => val != elementToRemove).ToArray();
                                    answerDictionary[(int)((System.Windows.FrameworkElement)sender).Tag] = string.Join(" ; ", newAnswers);
                                };

                                rb.Tag = i;
                                mainStackPanel.HorizontalAlignment = HorizontalAlignment;
                                rb.IsChecked = false;
                                stackOptions.Children.Add(rb);
                            }
                        }
                        else
                        {
                            if (question.QuestionTypeId == 3)
                            {
                                for (int k = 0; k < 2; k++)
                                {
                                    string[]    optionsTrueFalse = { "правда", "неправда" };
                                    RadioButton rb = new RadioButton()
                                    {
                                        Content = " " + optionsTrueFalse[k], IsChecked = i != 0
                                    };
                                    rb.Checked += (sender, args) =>
                                    {
                                        answerDictionary[(int)((System.Windows.FrameworkElement)sender).Tag] = ((System.Windows.Controls.ContentControl)args.Source).Content.ToString();
                                    };
                                    rb.Unchecked += (sender, args) => { /* Do nothing */ };
                                    rb.Tag        = i;
                                    rb.IsChecked  = false;
                                    mainStackPanel.HorizontalAlignment = HorizontalAlignment;
                                    stackOptions.Children.Add(rb);
                                }
                            }
                            else
                            {
                                throw new NotImplementedException();
                            }
                        }
                    }
                }
                else
                {
                    var textElementBox = new TextBlock();
                    textElementBox.Text = "Варіанти відповідей відсутні. ((";
                    stackOptions.Children.Add(textElementBox);
                    stackOptions.Tag = i;
                }
                stackQuestion.Children.Add(stackQuestionText);
                stackQuestion.Children.Add(stackOptions);
                listOfStackPanels.Add(stackQuestion);

                ++i;
            }

            // adding questions to stack.
            foreach (var listOfStackPanel in listOfStackPanels)
            {
                mainStack.Children.Add(listOfStackPanel);
            }

            mainStackPanel.Children.Add(mainStack);


            //add button SUBMIT
            Button buttonSubmit = new Button()
            {
                Content = "Завершити"
            };

            //< Button Content = "Button" HorizontalAlignment = "Left" Margin = "20,10,0,0" VerticalAlignment = "Top" Width = "75" Click = "Button_Click" />
            buttonSubmit.HorizontalAlignment = HorizontalAlignment.Left;
            buttonSubmit.Margin = new Thickness()
            {
                Bottom = 20, Left = 10, Right = 0, Top = 0
            };
            buttonSubmit.VerticalAlignment = VerticalAlignment.Top;
            buttonSubmit.Width             = 75;
            buttonSubmit.Click            += new RoutedEventHandler(Button_Click);

            mainStackPanel.Children.Add(buttonSubmit);
        }