2010-03-10 2 views
3

이 예제 코드에서는 GridCanvas 위치를 해당 행 중 하나의 높이만큼 오프셋하려고합니다. 누구든지 내가 잘못하고있는 것을 볼 수 있습니까? 보시다시피 xaml 파일에서 바인딩을 아래로 이동 시키려고 시도했습니다. RowDefinitions을 먼저 정의해야하는 경우에 대비했습니다. Canvas.Top는 아마 변경 알림의 종류를 게재하고 있지 않습니다 그래서 0RowDefinition의 높이에 바인딩하는 방법은 무엇입니까?

<Canvas> 
    <Grid Canvas.Top="{Binding ElementName=DetailsRow, Path=ActualHeight}"> 
     <Grid.RowDefinitions> 
     <RowDefinition x:Name="NameRow" /> 
     <RowDefinition x:Name="DetailsRow" /> 
     </Grid.RowDefinitions> 
     <Button Grid.Row="0">Button</Button> 
     <Button Grid.Row="1">Button</Button> 

     <!-- I expected this to maybe work, but no dice 
     <Canvas.Top> 
     <Binding ElementName="DetailsRow" Path="ActualHeight" /> 
     </Canvas.Top> 
     --> 

    </Grid> 
</Canvas> 

답변

8

ActualHeight는 종속성 속성이 아닙니다 항상 있기 때문에 어느 쪽이든, 중요하지 않는 것 같습니다. ActualHeight은 그리드가 측정 될 때까지 실제로 0에서 시작되므로 하나의 설명이 될 수 있습니다. 종속성 속성으로 ActualHeight을 정의하는 FrameworkElement과 달리 RowDefinitionFrameworkElement에서 파생되지 않으며 변경 이벤트가없는 일반 속성으로 ActualHeight을 정의합니다.

바인딩 시스템이 특정 간격으로 원본 속성을 폴링하는 BindingMode.Polling 옵션이 있어야한다는 사실에 대해 실제로 생각해 보았습니다. 하지만 유감스럽게도 코드에서이 작업을 수행 할 수 있습니다.

+0

종속성 속성이 아닌 것을 알지 못했습니다. 흠. 좋아, 계속 살펴볼 것이지만 코드에서해야 할 일이 옳다고 생각한다. – moswald

+0

@mos, 행운을 빕니다? – Josh

+2

필자는 그 줄에 패널을 깔고 그 이름을 지정한 다음 높이에 맞춰 바인딩했습니다. 시작시 바인딩 추적 오류가 발생하지만 창을 완전히 생성 한 후에는 모든 것이 제대로 작동하는 것처럼 보입니다. 이러한 오류를 제거하는 방법을 알아낼 수 있다면 여기에 해결책을 게시 할 것입니다. – moswald

관련 문제