2009-11-02 3 views
0

У меня есть ScrollViewer, который я пытаюсь выполнить привязку данных на высоте. ScrollViewer содержит длинный список ListBoxWPF Height Databinding question

Итак, вот мой вопрос. Мой ScrollViewer будет привязываться к высоте моего окна (Name="MainForm") просто отлично. Но это слишком долго.

Если я пытаюсь привязать к сетке в окне (Name="MainGrid"), то ScrollViewer будет расширяться до полной длины списка (без прокрутки).

Очевидно, что я мог бы жестко запрограммировать высоту, но тогда она не изменится с увеличением. Особенность, которую я не хочу потерять.

Любые идеи?

Это XAML с обязательным комплектом для MainGrid

<Window 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
Title="WI Assistant" Height="621.25" Width="943.75" Name="MainForm" FontSize="14"> 
<Grid Name="MainGrid"> 
    <DockPanel Margin="266.25,0,455,12" HorizontalAlignment="Left" Name="dockPanel1"> 
     <StackPanel> 
      <ScrollViewer Height="{Binding ElementName=MainGrid, Path=Height}"> 
        <ListBox Name="cboProjects" FontSize="14" > 
        <ListBoxItem>Test1</ListBoxItem> <ListBoxItem>Test1</ListBoxItem> <ListBoxItem>Test1</ListBoxItem> 
        <ListBoxItem>Test1</ListBoxItem> <ListBoxItem>Test1</ListBoxItem> <ListBoxItem>Test1</ListBoxItem> 
        <ListBoxItem>Test1</ListBoxItem> <ListBoxItem>Test1</ListBoxItem> <ListBoxItem>Test1</ListBoxItem> 
        <ListBoxItem>Test1</ListBoxItem> <ListBoxItem>Test1</ListBoxItem> <ListBoxItem>Test1</ListBoxItem> 
        <ListBoxItem>Test1</ListBoxItem> <ListBoxItem>Test1</ListBoxItem> <ListBoxItem>Test1</ListBoxItem> 
        <ListBoxItem>Test1</ListBoxItem> <ListBoxItem>Test1</ListBoxItem> <ListBoxItem>Test1</ListBoxItem> 
        <ListBoxItem>Test1</ListBoxItem> <ListBoxItem>Test1</ListBoxItem> <ListBoxItem>Test1</ListBoxItem> 
        <ListBoxItem>Test1</ListBoxItem> <ListBoxItem>Test1</ListBoxItem> <ListBoxItem>Test1</ListBoxItem> 
        <ListBoxItem>Test1</ListBoxItem> <ListBoxItem>Test1</ListBoxItem> <ListBoxItem>Test1</ListBoxItem> 
        <ListBoxItem>Test1</ListBoxItem> <ListBoxItem>Test1</ListBoxItem> <ListBoxItem>Test1</ListBoxItem> 
        <ListBoxItem>Test1</ListBoxItem> <ListBoxItem>Test1</ListBoxItem> <ListBoxItem>Test1</ListBoxItem> 
        <ListBoxItem>Test1</ListBoxItem> <ListBoxItem>Test1</ListBoxItem> <ListBoxItem>Test1</ListBoxItem> 
        <ListBoxItem>Test1</ListBoxItem> <ListBoxItem>Test1</ListBoxItem> <ListBoxItem>Test1</ListBoxItem> 
        <ListBoxItem>Test1</ListBoxItem> <ListBoxItem>Test1</ListBoxItem> <ListBoxItem>Test1</ListBoxItem> 
        <ListBoxItem>Test1</ListBoxItem> <ListBoxItem>Test1</ListBoxItem> <ListBoxItem>Test1</ListBoxItem> 
        <ListBoxItem>Test1</ListBoxItem> <ListBoxItem>Test1</ListBoxItem> <ListBoxItem>Test1</ListBoxItem> 
        <ListBoxItem>Test1</ListBoxItem> <ListBoxItem>Test1</ListBoxItem> <ListBoxItem>Test1</ListBoxItem> 
        <ListBoxItem>Test1</ListBoxItem> <ListBoxItem>Test1</ListBoxItem> <ListBoxItem>Test1</ListBoxItem> 
        <ListBoxItem>Test1</ListBoxItem> <ListBoxItem>Test1</ListBoxItem> <ListBoxItem>Test1</ListBoxItem> 
        <ListBoxItem>Test1</ListBoxItem> <ListBoxItem>Test1</ListBoxItem> <ListBoxItem>Test1</ListBoxItem> 
        <ListBoxItem>Test1</ListBoxItem> <ListBoxItem>Test1</ListBoxItem> <ListBoxItem>Test1</ListBoxItem> 
        <ListBoxItem>Test1</ListBoxItem> <ListBoxItem>Test1</ListBoxItem> <ListBoxItem>Test1</ListBoxItem> 
        <ListBoxItem>Test1</ListBoxItem> <ListBoxItem>Test1</ListBoxItem> <ListBoxItem>Test1</ListBoxItem> 
       </ListBox> 
      </ScrollViewer> 
     </StackPanel> 
    </DockPanel> 
</Grid> 

(Это будет работать (F5) в XamlPadx)

ответ

3

Возьмите его из StackPanel, потому что StackPanel s растут неограниченно в направлении их ориентации (вертикально, в этом случае). Начните с самого простого решения:

<Window> 
    <ScrollViewer> 
     <ItemsControl> 
      ... 
     </ItemsControl> 
    </ScrollViewer> 
</Window> 

Затем добавьте сложность по мере необходимости.

+1

+1 Использование 'StackPanel' с отдельными элементами часто вызывает эти вопросы. –

+0

Благослови вас! Я собирался вытащить волосы на этом. Кстати, я использовал стек стека для стека Expander (более одного элемента управления). Я упростил свой Xaml перед публикацией. Теперь я знаю, что не могу использовать ListBox внутри расширителя внутри панели стека. Благодаря! – Vaccano

+0

Или действительно, ListBox внутри StackPanel (Expanders в сторону) – Vaccano