2009-07-03 6 views
0

에 액세스 : 당신은 내가 2 열을 볼 수있는어떻게이 같은 상황이 신장 요소의 실제 높이 = 자동

<Grid> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="560"/> 
     <ColumnDefinition Width="250"/> 
    </Grid.ColumnDefinitions> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="Auto" /> <!-- status infos & content start --> 
     <RowDefinition Height="Auto" /> <!-- status infos --> 
     <RowDefinition Height="Auto" /> <!-- status infos --> 
     <RowDefinition Height="Auto" /> <!-- status infos --> 
     <RowDefinition Height="*"/>  <!-- content ends --> 
    </Grid.RowDefinitions> 

    <!-- image a list of custom controls directed to the first or second column on all rows here --> 

    <SomeCustomControl Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="2" Grid.RowSpan="2" /> 
</Grid> 

이, 오른쪽에 하나가 더 많거나 적은 예약 상태 정보입니다는 콘텐츠로 남았습니다. "SomeCustomControl"에는 Control이 너무 커서 ColumnSpan = "2"로 설정해야합니다. 여전히 오른쪽 열에 상태 컨트롤이 있음을 알 수 있습니다.

<Grid x:Name="LayoutRoot"> 

    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="*"/> 
     <ColumnDefinition Width="250"/> 
    </Grid.ColumnDefinitions> 

    <Grid.RowDefinitions> 
     <RowDefinition Height="Auto" /> 
     [...] 
     <RowDefinition Height="Auto" /> 
     <RowDefinition Height="*" /> <!-- problem control here --> 
     <RowDefinition Height="Auto" /> 
    </Grid.RowDefinitions> 

    <!-- a list of Controls limited to the first column --> 

    <ProblemControl Grid.Column="0" Grid.ColumnSpan="2" /> 
</Grid> 

이제 SomeCustomControl의 첫 번째 행의 첫 번째 열 제한 컨트롤을 포함, 다음 내 ProblemControl가 포함 된 행이 : SomeCustomControl에서 나는 이런 식으로 뭔가가있다. 상태 컨트롤의 높이는 미리 결정되지 않고 표시된 상태 정보에 따라 다릅니다. 첫 번째 열로 제한된 SomeCustomControl의 컨트롤 또한 다른 높이를 가지며 현재 콘텐츠를 통해 자동으로 결정됩니다.

이제 ProblemControl이 일부 상태 컨트롤과 겹치는 문제가 있습니다. 내 상태 컨트롤 및 SomeCustomControl 제한된 컨트롤의 높이를 계산하려면 시도했지만 모든 컨트롤을 동적으로 크기가 올바른 높이 얻이 수없는 것처럼. RowDefinitions의 높이에는 모두 Auto 타입의 Height와 값 1이 포함되어 있습니다. 구체적인 컨트롤의 Height는 NaN 인 것처럼 보입니다.

높이를 계산하거나 다른 방법으로 중첩을 방지하는 방법에 대한 아이디어.

답변

1

컨트롤에 ActualHeight 속성을 사용해 보셨습니까?

+0

컨트롤이 보이기 시작했기 때문에이 값에는 "이전"값 (현재 변경된 상태 정보에 따라 0과 일부 값이 변경됨)이 포함되어있는 것처럼 보입니다. 어쩌면 내가 컨트롤을 볼 수있는 후 해고 계산을 넣어 어떤 이벤트를 찾을 수 있습니다. 어쨌든 ActualHeight의 Thx입니다. 나는 이제 새로운 안경이 필요 없다는 변명의 이유를 알아 냈습니다. P – gsnerf

0

Grid 및 일부 패널 (DockPanelStackPanel은 매우 유용 할 수 있음)의 적절한 사용으로이를 해결할 수 있어야합니다. 일부 컨트롤에서는 으로 설정된 HorizontalAlignment 또는 VerticalAlignment 속성이 필요할 수도 있습니다.

예를 들어 문제를 복제하거나 올바르게 처리했음을 알리는 데 충분하지 않습니다. 보다 구체적인 도움이 필요하면 예제를 확장하여 실행하여 문제를 확인하십시오.

+0

여기에 중첩 컨트롤이 있습니다. 두 번째 눈금은 첫 번째 눈금에서 참조한 컨트롤 안에 있습니다. 나는 그리드를 한 걸음 올려 놓고 그리드와 패널로 해결할 수 없다. 예제를 실행하지 않으려는 경우에는 지정된 격자 레이아웃을 사용하여 2 개의 컨트롤을 만들고 일부 색의 캔바스 객체를 배치하십시오. 나는 나머지 레이아웃을 설명했다. 불행히도 프로젝트 제한으로 인해 정확한 코드를 공유 할 수 없습니다. – gsnerf

+0

사실, 나는 더 적은 중첩을 제안합니다. 필요한 경우 그리드에 패널을 그리고 패널을 해당 중첩 패널에 투사하십시오. –

2

같은 문제가 발생했지만 솔루션을 최근에 보았습니다. 너비 또는 높이가 Auto로 설정된 컨트롤의 너비 및 높이 속성에 액세스 할 수없는 이유는 런타임 시스템에서 속성 값을 설정하기 전에 쿼리하기 때문입니다. ActualWidthActualHeight은 이론적으로 컨트롤의 렌더링 된 높이를 얻으려고한다고 주장합니다. SL 응용 프로그램이로드를 마칠 때까지 기다렸다가 쿼리를 수행 할 수 있다고 생각할 것입니다. 컨트롤이 그때 렌더링 될 것이기 때문에 ActualHeight/ActualWidth 값을 설정해야합니다.

슬프게도,이 경우가 아닙니다. 이러한 값을 설정할 때 어떤 보증도없는 것 같습니다. 그래서 제가 사용한 대안은 값이 원하는 컨트롤의 SizeChanged -event에 연결하는 것입니다. SizeChanged은 컨트롤의 width 및 height 속성이 변경 될 때마다 트리거되므로 해당 이벤트를 처리하면 값이 NaN 이외의 값으로 설정됩니다.

해당 이벤트에 대한 처리기에서 수행해야하는 논리를 수행하면 값이 설정됩니다.