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

이 유형의 코드를 처리하는 가장 확실한 방법은 모델보기 컨트롤러 패턴을 사용하는 것입니다. 애니메이션과 같은 원래 값과 리소스를 저장하는 모델을 할당합니다. 사용자 입력을 해석하고 모델 클래스로 데이터를 보내는 소스 클래스를 만듭니다. 모델이 원하는대로 버튼을 변경하는 뷰 클래스를 업데이트하도록하십시오. 많은 일을하는 것처럼 들리지만, 모든 것이 합쳐지면 갚을 수 있습니다. 단일 모델 클래스는 많은 UI 요소를 처리 할 수 ​​있지만 일반적으로 각 복합 모델에 대해 하나의 모델 클래스를 만듭니다. XAML 및 WINFORMS는 View 개체로 사용됩니다. –

답변

1

사각형로드의 원래 높이와 너비를 폼로드의 변수에 저장할 수 있습니다. 이러한 변수를 사용하여 사각형 크기를 원래 크기로 변경하고 단추를 클릭하여 새 창을여십시오. 다음 코드는 양식 내부의 상단에 있습니다.

개인 int rect1width; 개인 정수 rect1height;

귀하의 양식에 __ 마지막에 이것을 작성하십시오.

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

버튼 클릭 코드에서 다음 코드가 맨 위에 표시됩니다.

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

+0

어떻게 저장하고 사용합니까? – AlexDev

+0

양식에 두 개의 변수를 만들고 rect의 실제 높이와 실제 폭에서 값을 설정하십시오. 이러한 변수는 Rect1에 액세스 할 수 있으므로 양식의 모든 코드에서 액세스 할 수 있으므로 버튼 클릭 코드에서 사용할 수 있습니다. 단추 click 이벤트에서 rect.width 및 rect.height를 설정하십시오. –

+0

작은 발언으로이 작업을 수행하는 방법입니다. ActualHeight 및 ActualWidth는 두 배가되므로 개인용 int 대신 개인용 double을 전환하면 매력처럼 작동합니다! – AlexDev

-1

여기 보이는 코드가 길지만 MVC 유형 디자인 패턴과 상태 패턴이있는 화합물을 사용합니다. 진정한 MVC를 만들기 위해 실종 된 유일한 방법은 설문 조사에 참여하는 Observers 및 관찰 가능한 인터페이스입니다.

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(); 
      } 

나중에 당신은 당신이 당신이 그들을 변경할 수 있습니다 이들의의 기본 값을 변경하기로 결정한 경우

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; 
    } 

지금 당신이해야 할 모든 조건을 연결합니다. 새로운 직사각형 모양이나 크기를 추가하려면 추가 할 수 있습니다. 직사각형을 추가로 수정하기 위해 어댑터를 생성하려면 그렇게 할 수 있습니다. 이것은 좋은 패턴입니다. 대답은 너무 과장되어 있습니다.하지만 설문에 액세스 할 때 코드가 튼튼하게 작동하고 매우 유연하다는 것을 알게 될 것입니다.

+0

고마워요. 6 개의 직사각형과 5 개의 타원을 처리해야한다는 것을 제외하면 좋을 것입니다. 따라서이 코드를 타이핑하거나 아니면 붙여 넣기 만하는 긴 프로세스 일 것입니다. 나를 잘못 이해하지 마라. 나는 실제로이 방법이 마음에 든다. 단지 1 또는 2,3 개의 직사각형이라면 그것을 사용할 것이다. 하지만 제 시나리오에서는 좀 더 실용적인 것이 필요합니다! – AlexDev