2010-05-18 2 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 всегда появляется в левом нижнем углу. Не только это, но если общая доступная высота меньше высоты всего содержимого в списке, она будет ограничена доступной высотой и показывает полосу прокрутки. Что-то, что ваш код в противном случае должен был бы перепрыгнуть через обручи.