2010-01-20 8 views
3

WPF 프로그램을 디버깅 할 때 윈도우가 설정된 크기 일 때 contols가 잘 보입니다. 그러나 창이 최대화되면 내용이 창 크기가 조정되지 않은 것과 같은 위치에 배치됩니다. 나는 내용과 창을 비례 적으로 크기를 조정하기를 원한다. 어떻게해야합니까? 그것이 noobish 질문이라면 미안하지만, 나는 WPF 시대에서 좀 새로운 것이다.WPF의 윈도우 크기를 자동으로 조정


XAML 코드는 완전히 준비가되지 않았습니다 아직 그러나 여기 요소 중 일부입니다 :

<DockPanel> 
    <StackPanel DockPanel.Dock="Left"> 
    ... 
    </StackPanel> 

    <TabControl DockPanel.Dock="Right"> 
    ... 
    </TabControl> 

    <ListView> 
    ... 
    </ListView> 
</DockPanel> 
+12

모든 WPF 질문의 첫 번째 규칙 인 "Post thy XAML" – keithwarren7

답변

5

일반적으로 차원 값은 동적으로가 아니라 정적으로 설정되기 때문입니다. 정적 접근 방식은 다음과 같습니다.

<RowDefinition x:Name="NavigatorRow" Height="120"/> 
<RowDefinition x:Name="TaskPanelRow" Height="80"/> 

두 행의 높이가 고정되어 있으며 창 크기가 조정되지 않습니다.

다음은 동적 접근 방식 :

<RowDefinition x:Name="NavigatorRow" Height="1*"/> 
<RowDefinition x:Name="TaskPanelRow" Height="80"/> 

하단 행은 여전히 ​​80의 고정 된 높이를 가지고 있지만, 맨 윗줄 사용할 수있는 어떤 공간을 채우도록 확장됩니다. 즉, 행은 창의 크기가 조정됩니다. 열은 같은 방식으로 작동합니다. 나는 세 개의 행이 있다면

, 나는이 작업을 수행 할 수 있습니다 :

<RowDefinition x:Name="NavigatorRow" Height="1*"/> 
<RowDefinition x:Name="CalendarRow" Height="2*"/> 
<RowDefinition x:Name="TaskPanelRow" Height="80"/> 

네비게이터 행과 달력 행 일정 행을 두 번 네비게이터 행의 높이를 고려하여, 사용 가능한 공간을 공유합니다. 당신은 아이디어를 얻습니다.

그래서 사용하는 컨테이너가 아니라 컨테이너의 크기를 결정하는 방법입니다. 위에서 언급 한 것과 같이 한 가지 예외는 확장되지 않은 StackPanel입니다. 대신 눈금을 사용하십시오.

3

을 보통 내용이 명시 적으로 설정 폭과 높이가 컨테이너에서 호스팅되는 때문입니다 - 같은 그리드 예를 들면.

귀하의 Xaml을 게시 하시거나 그 답변이 가장 좋습니다!

0

글쎄, 당신은 컨트롤을위한 일종의 컨테이너가 있어야합니다, 맞습니까? 캔버스를 사용하고 컨트롤을 절대적으로 그 안쪽에 배치하면 당신은 거의 운이 없어진 것입니다. 이것은 인터페이스 스케일링에 적합하지 않습니다.

그러나 어떤 방법 으로든 배치 한 다양한 컨테이너 컨트롤이 있습니다. 제대로 사용하면 크기 조정 창으로도 확장됩니다. 그리드는 꽤 유연하지만 StackPanel과 DockPanel도 매우 편리합니다.

필요할 경우 중첩 할 수 있습니다.

2

동적으로 제대로 크기를 조정하지 않는 StackPanels 사용을 피하십시오.

사물을 비례 적으로 크기를 조정하려면 그리드를 사용하고 백분율을 지정하는 것이 가장 이상적입니다.

0

Widht 및 Height 속성이 "Number *"개념으로 설정된 WPF 격자를 사용하십시오. 예 : 폭 = "0.6 *", 높이가 컨테이너에 비례하지만 절대 높이가 아닙니다. 일반적으로 크기를 조정할 수있는 콘텐츠를 원하면 가능한 한 고정 크기 속성을 사용하지 마십시오.

<Grid.RowDefinitions> 
     <RowDefinition Height="10*"></RowDefinition>      
     <RowDefinition Height="*" ></RowDefinition> 
    </Grid.RowDefinitions> 

행운을 비네.

1

모두가 스택 패널의 크기를 동적으로 조정하지 않는다고 말하는 이유를 잘 모릅니다. 그리드처럼 크기 조절을 처리합니다. HorizontalAlignment = "Stretch"(및/또는 VerticalAlignment)를 설정하면 내용이 스택 패널 크기를 채우기 위해 확장됩니다. 나는 현재 많은 중첩 스택 패널로 구성된 UI를 사용하고 있으며, 가로 및 세로 크기 조정은 창 내부의 모든 컨트롤을 똑같이 확장/축소합니다.

관련 문제