2017-11-15 14 views
0

질문은 WPF: when I maximize my window, controls do not resize과 같으며 응답이 없습니다.컨트롤은 최대화되면 크기가 조정되지 않지만 드래그하여 크기가 조정될 때 수행되지 않습니다. - wpf

폼의 둘 이상의 가장자리에 연결된 일부 컨트롤이 포함 된 WPF 폼이 있습니다. 폼 크기의 비율로 컨트롤 크기를 조정하는 sizechanged 이벤트에 코드를 추가했습니다. 코드가 제대로 작동하고 컨트롤을 드래그하여 양식의 크기를 조절하면 컨트롤의 크기가 올바르게 조정됩니다.

폼이 최대화되면 컨트롤의 크기가 조정되지 않고 창 위쪽과 아래쪽에 연결된 컨트롤에 세로로 저장됩니다.

나는 statechanged 이벤트에 비슷한 코드를 추가했지만 아무런 효과가 없습니다. 나는 똑바로 시도했다 TextBox1.Width = 300; 그러나 이것은 한 번 maximized 크기를 바꾸지 않는다.

이상적으로 말하고자하는 것은 TextBox1.Width = Window.width/3; TextBox1.Margin = My_Margin;입니다. 여기서 My_Margin은 왼쪽 여백을 1/3의 Window.Width로 설정합니다. 그래서 텍스트 상자가 창 중앙의 3 분의 1을 차지합니다.

편집 : GRID 메소드가 프로젝트의 시작에서부터 시작하는 방법 이었음을 이해합니다. 이 단계에서 C#을 사용하여 해결할 수있는 해결 방법이 있습니까?

편집 : 내가 가진 유일한 옵션처럼 보이는대로 실제 질문에 답하지 않더라도 가장 좋은 대답을 수락했습니다. 폼이 최대화되면 컨트롤의 크기를 조정할 수있는 방법이 있다는 것을 알고 있으므로 찾을 시간이 없으며 좋은 제안이 없습니다.

+0

"크기를 조절하여 크기를 조절하는 sizechanged 이벤트에 코드를 추가했습니다." 이것은 의미가 없습니다. WPF는 강력한 레이아웃 시스템을 제공합니다. 여기에서 읽기 시작하십시오 : https://docs.microsoft.com/en-us/dotnet/framework/wpf/advanced/layout. 그리드를 컨테이너 요소로 사용하십시오. – Clemens

+0

이제 Grid가 가장 좋은 방법이라는 것을 알았지 만 코드에서이 문제를 해결하고 양식을 다시 작성하지 않고이 문제를 처리 할 수 ​​있기를 희망했습니다. 이것이 가능한가? – Ritchie

+0

그 방향으로 어떤 노력을 멈추고 적절한 레이아웃을 사용하는 것이 좋습니다. 그것은 시간 낭비입니다. – Clemens

답변

3

격자를 사용하고 열 너비와 행을 정의하고 Grid.Row 및 Grid.Column 속성을 사용하여 텍스트 상자를 배치합니다. WPF Grid에서 *, Width 및 Height는 비례 크기 조정을 의미합니다. 그래서 예를 들어 당신은 동안 두 번째 90 %, 첫 번째 열은 전체 사용 가능한 폭의 10 %를 차지할 WPF하는 말을하는이 사람

<Grid.ColumnDefinitions> 
    <ColumnDefinition Width="1*"></ColumnDefinition> 
    <ColumnDefinition Width="9*"></ColumnDefinition> 
</Grid.ColumnDefinitions> 

같이 정의 2 열이있는 경우.

+0

처음에는 이런 식으로 생각했지만 다른 컨트롤은 다르게 배치 되었기 때문에, 이 방법은 모든 것을 놓기가 매우 어려웠습니다. 나는 당신이 한마디로 설명하지 않았고,이 단계에서 레이아웃을 다시 잡는 것이 매우 어려울 것이라고 생각합니다. C# 코드의 컨트롤 크기를 변경하는 방법이 있습니까? – Ritchie

+0

이 연습을 구현하는 데 약간의 시간이 걸리므로 컨트롤에 대한 정확한 치수를 원하지 않는 한 하드 코딩하지 마십시오.이 방법으로 가능한 모든 모니터와 크기 내에서 모양을 유지하는 앱을 만들 수 있습니다. –

+0

향후 프로젝트에 동의하고이를 수행 할 의사가 있습니다. 이 단계에서 해결 방법이 있습니까? – Ritchie