Проблема размера вложенного ListBox - PullRequest
2 голосов
/ 04 сентября 2010

Мне нужна твоя помощь! : -)

Проверьте этот пример кода:

    <ListBox VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Width="500">
        <ListBox x:Name="Item1" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Width="300" BorderBrush="Red" BorderThickness="5">
            <ListBox.Items>
                <RichTextBox VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Width="300" SizeChanged="OnInnserItemSizeChanged"/>
                <RichTextBox VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Width="300"/>
                <RichTextBox VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Width="300"/>
            </ListBox.Items>
        </ListBox>
        <ListBox x:Name="Item2" BorderBrush="Green" BorderThickness="5" Width="300" VerticalAlignment="Stretch" HorizontalAlignment="Stretch">
            <ListBox.Items>
                <RichTextBox VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Width="300"/>
                <RichTextBox VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Width="300"/>
                <RichTextBox VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Width="300"/>
            </ListBox.Items>
        </ListBox>            
    </ListBox>

Теперь, когда я запускаю его и нажимаю «Enter» / «Return» в одном из RichTextBoxes, внешний элемент списка (например, x: Name = Item1) растягивается, чтобы соответствовать новому размеру - но когда я удаляю вновь добавлена ​​строка, размер которой не изменяется до исходного размера ...

Thanx, Гили

1 Ответ

4 голосов
/ 04 сентября 2010

Это вызвано тем, как VirtualizingStackPanel обрабатывает прокрутку, хотя я не знаю причину этого.Вы можете предотвратить это, используя обычную StackPanel в качестве ItemsPanel вместо VirtualizingStackPanel:

<ListBox x:Name="Item1" VerticalAlignment="Stretch" HorizontalAlignment="Stretch"
         Width="300" BorderBrush="Red" BorderThickness="5">
    <ListBox.ItemsPanel>
        <ItemsPanelTemplate>
            <StackPanel/>
        </ItemsPanelTemplate>
    </ListBox.ItemsPanel>

или запретив VirtualizingStackPanel обрабатывать прокрутку, установив ScrollViewer.CanContentScroll в False:

<ListBox x:Name="Item1" VerticalAlignment="Stretch" HorizontalAlignment="Stretch"
         Width="300" BorderBrush="Red" BorderThickness="5"
         ScrollViewer.CanContentScroll="False">

Обратите внимание, что выполнение любого из них приведет к потере виртуализации во внутреннем ListBox.В этом случае вы все равно не воспользовались этим преимуществом, так как внешний ListBox имеет ScrollViewer, который позволит внутреннему ListBox расти настолько высоко, насколько он хочет, что означает, что он всегда будет отображать все свои строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...