2010-05-18 80 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 2010-05-18 14:05:03

回答

1

嘗試綁定{Binding ActualHeight, RelativeSource={RelativeSource Self},Converter={StaticResource LamdaConv}, ConverterParameter='val=>-val'}

+0

這就是我一直在尋找的。 謝謝! – Qanik 2010-05-19 07:28:08

1

聽起來對我來說就像是你對這項工作使用了錯誤的控制。一個Grid可以處理這個問題沒有這一切的努力: -

<Grid> 

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

現在ListBox總是出現在左下角。不僅如此,但如果總可用高度小於列表框中所有內容的高度,它將被限制在可用高度並顯示滾動條。你的代碼可能會不得不跳出工作環境。