2017-01-08 15 views
1

У меня есть приложение с основным окном, которое содержит прямоугольник и кнопку, ведущую в другое окно, в которое пользователь вводит информацию. После ввода информации пользователь нажимает кнопку и возвращает его в главное окно и соответственно изменяет размер. То, что я пытаюсь достичь, - вернуть ActualHeight и ActualWidth в прямоугольник, если пользователь снова нажмет кнопку в главном окне, вроде обновления прямоугольника. Весь код находится в главном окне. Если вам нужна какая-то конкретная информация о коде, я с радостью отдам ее вам.возврат фактической высоты и ширины к прямоугольнику wpf после динамического изменения

private void buttonStart_Click(object sender, RoutedEventArgs e) 
    { 
     Questionnaire q = new Questionnaire(); 
     q.ShowDialog(); 

var size = q.textBoxNumberOfEmployees.Text; 

     if (int.Parse(size) > 5 && int.Parse(size) < 15) 
     { 
      Rect1.Height = Rect1.ActualHeight - 10; 
      Rect1.Width = Rect1.ActualWidth - 5; 
     } 

     else if (int.Parse(size) > 15 && int.Parse(size) < 30) 
     { 
      Rect1.Height = Rect1.ActualHeight - 15; 
      Rect1.Width = Rect1.ActualWidth - 10; 
     } 
     else if (int.Parse(size) > 30 && int.Parse(size) < 100) 
     { 
      Rect1.Height = Rect1.ActualHeight - 30; 
      Rect1.Width = Rect1.ActualWidth - 15; 
     } 
     else 
     { 
      Rect1.Height = Rect1.ActualHeight; 
      Rect1.Width = Rect1.ActualWidth; 
     } 
+0

Я собираюсь сказать, что нам нужна конкретная информация о коде. – Abion47

+0

@ Abion47 Я отредактировал свой вопрос, добавил код, который мог бы помочь – AlexDev

+0

Я думаю, что самым надежным способом обработки этого типа кода было бы использование шаблона контроллера модели. Имейте заданную модель, в которой хранятся исходные значения и ресурсы, такие как анимация и т. Д. Создайте исходный класс, который интерпретирует ввод пользователя и отправляет данные в класс модели. Попросите модель обновить класс представления, который изменяет кнопку на все, что вы хотите. Похоже, что много работы, но оно окупается, когда все вместе. Один класс модели может обрабатывать многие элементы пользовательского интерфейса, но я обычно создаю один класс модели для каждой сложной модели. XAML и WINFORMS действуют как объекты View. –

ответ

1

Вы можете сохранить оригинальную высоту и ширину прямоугольника в переменных в форме нагрузки. Используйте эти переменные, чтобы сделать прямоугольник с исходным размером bebore, открывая новое окно при нажатии кнопки. Следующий код идет вверху вашей формы.

частный int rect1width; частный int rect1height;

В вашем виде__load вы пишете это в конце.

rect1width = Rect1.ActualWidth; rect1height = Rect1.ActualHeight;

В вашей кнопке нажмите код, следующий код идет вверху.

Rect1.Width = rect1width; Rect1.Height = rect1height;

+0

Как я могу его хранить и использовать? – AlexDev

+0

Создайте две переменные в своей форме и задайте значения из фактической высоты и фактической ширины прямоугольника. Эти переменные будут доступны по всему коду вашей формы, поскольку вы можете получить доступ к Rect1, чтобы вы могли использовать его в кодовом клике. установите rect.width и rect.height из них в событие нажатия кнопки. –

+0

это способ сделать это с небольшим примечанием, ActualHeight и ActualWidth - это удваивает, поэтому вместо частного int просто переключайте private double и он работает как шарм! Спасибо – AlexDev

-1

Вот несколько, казалось бы, длинный код, но он использует шаблон дизайна типа MVC и соединения с шаблоном состояния. Единственное, чего действительно не хватает, чтобы удостовериться, что это MVC - наблюдатели и наблюдаемые интерфейсы, которые будут подписываться на Анкету.

public interface RectangleState 
    { 
     int myHeight { get; set; } 
     int myWidth { get; set; } 
    } 
    public class RectangleModel 
    { 
     private static Rectangle Rect1; 
     public RectangleModel(Rectangle rect1) 
     { 
      Rect1 = rect1; 
     }   
     private RectangleState state; 
     public RectangleState State 
     { 
      get 
      { 
       return state; 
      } 
      set 
      { 
       state = value; 
       ModifyState(value.myHeight, value.myWidth); 
      } 
     } 
     private void ModifyState(int Height, int Width) 
     { 
      Rect1.Height = Height; 
      Rect1.Width = Width; 
     } 
    } 
    public class SmallState : RectangleState 
    { 
     public int myHeight { get; set; } = 20; 
     public int myWidth { get; set; } = 80; 
    } 
    public class MediumState : RectangleState 
    { 
     public int myHeight { get; set; } = 25; 
     public int myWidth { get; set; } = 90; 
    } 
    public class LargeState : RectangleState 
    { 
     public int myHeight { get; set; } = 35; 
     public int myWidth { get; set; } = 120; 
    } 
    public class NormalState : RectangleState 
    { 
     public int myHeight { get; set; } = 30; 
     public int myWidth { get; set; } = 100; 
    } 

Теперь все, что вам нужно сделать, это подключить в условиях:

RectangleModel RM = new RectangleModel(myRectangle); // store this in your class as property; 
      int size = 0; 
      int.TryParse(q.textBoxNumberOfEmployees.Text, out size); 
      if (size > 5 && size < 15) 
      { 
       RM.State = new SmallState();     
      } 

      else if (size > 15 && size < 30) 
      { 
       RM.State = new MediumState(); 
      } 
      else if (size > 30 && size < 100) 
      { 
       RM.State = new LargeState(); 
      } 
      else 
      { 
       RM.State = new NormalState(); 
      } 

Если позже вы решите, что вы хотите изменить значения по умолчанию на любом из них вы можете изменить их. Если вы хотите добавить новую форму или размер прямоугольника, вы можете добавить ее. Если вы хотите создать адаптер для дальнейшего изменения прямоугольника, вы можете это сделать. Это хороший образец. Я знаю, что ответ выглядит завышенным, но я думаю, вы обнаружите, что он работает солидно и достаточно гибкий, когда подключен к коду, который обращается к вашему опросу.

+0

Это было бы хорошо, если бы у меня не было 6 прямоугольников и 5 эллипсов, поэтому было бы любопытно длинный процесс ввода этого кода или даже просто скопировать его. Не поймите меня неправильно, я действительно люблю этот метод и буду использовать его, если бы это было всего 1 или 2,3 прямоугольника. Но в моем сценарии мне нужно что-то более практичное! – AlexDev

 Смежные вопросы

  • Нет связанных вопросов^_^