2010-05-18 4 views
2

목록 위치를 XAML에서 고유 높이로 바인딩하려고합니다. 따라서 왼쪽 아래 모서리는 항상 캔버스의 0.0에 위치합니다. elementBinding을 사용하여 ActualHeight 및 속성을 반전하는 변환기를 가져옵니다. 그러나 변환기로 보낸 높이가 0입니다.ActualHeight에 바인딩 위치

어떻게 해결합니까? 아니면 잘못된 방향으로 가고 있습니까?

<Canvas x:Name="DisplaySurface"> 
    <ListBox x:Name="MenuList" Visibility="Visible" 
      Canvas.Top="{Binding ElementName=MenuList, Path=ActualHeight, 
      Converter={StaticResource LamdaConv}, ConverterParameter='val=>-val'}"> 

     <ListBoxItem Content="item 1" /> 
     <ListBoxItem Content="item 2" /> 
     <ListBoxItem Content="item 3" /> 
     <ListBoxItem Content="item 4" /> 
     <ListBoxItem Content="item 5" /> 
     <ListBoxItem Content="item 6" /> 
    </ListBox> 
</Canvas> 
+0

답장을 보내 주셔서 감사합니다! 목표는 목록 상자를 다른 컨트롤의 상단/상단에 표시하는 것이므로 캔버스를 사용하여 목록 상자에 음수 위치를 지정할 수 있어야합니다. 드롭 다운과 같이 생각하십시오. – Qanik

답변

1

바인딩을 시도하십시오. {Binding ActualHeight, RelativeSource={RelativeSource Self},Converter={StaticResource LamdaConv}, ConverterParameter='val=>-val'}

+0

이것은 내가 찾고있는 것이었다. 감사합니다. – Qanik

1

잘못된 제어 기능을 사용하고있는 것처럼 들립니다. Grid이 모든 노력없이이 문제를 처리 할 수 ​​있습니다 : -

<Grid> 

    <Canvas x:Name="DisplaySurface"> 
    </Canvas> 
    <ListBox HorizontalAlignment="Left" VerticalAlignment="Bottom" ...> 
     <!-- items ---> 
    </ListBox> 
</Grid> 

이제 ListBox는 항상 왼쪽 하단에 나타납니다. 뿐만 아니라 총 사용 가능한 높이가 목록 상자에있는 모든 콘텐츠의 높이보다 작은 경우 사용 가능한 높이로 제한되고 스크롤 막대가 표시됩니다. 당신의 코드가 그렇지 않으면 작업하는 농구를 뛰어 넘어야 할 것입니다.