Полосы прокрутки Silverlight TreeView исчезают внутри StackPanel - PullRequest
2 голосов
/ 28 января 2009

Я строю проект, который загружает данные из веб-сервиса в элемент управления TreeView. Когда TreeView содержится в сетке LayoutRoot сам по себе, а его высота установлена ​​на Auto, если содержимое выходит за пределы вертикальных или горизонтальных пределов полос прокрутки дерева, появляются автоматически, как и ожидалось.

Если тот же элемент управления TreeView находится внутри StackPanel, его поведение меняется. Когда данные выходят за их пределы, полоса прокрутки не появляется, и данные просто отрываются от края без доступа к ним. Если я вручную установлю высоту TreeView в этом сценарии, полосы прокрутки снова появятся, как и ожидалось.

Очевидно, что существует некоторое взаимодействие между StackPanel и TreeView, которое я не вижу.

Может кто-нибудь объяснить это и предложить подходящий способ справиться с ситуацией?

За запрос в комментариях:

Следующий XAML работает нормально и отображает полосы прокрутки, как и ожидалось (обратите внимание, что указана высота на TreeView):

<StackPanel >
            <controls:TreeView ItemTemplate="{StaticResource MainEntryIndexTemplate}" 
                                     x:Name="CodeBookIndexTreeView" Height="500" />
</StackPanel>

Следующее также отображает полосы прокрутки, как и ожидалось (не обратите внимание на StackPanel, но для TreeView установлено значение Auto):

        <controls:TreeView ItemTemplate="{StaticResource MainEntryIndexTemplate}" 
                                 x:Name="CodeBookIndexTreeView" Height="Auto" />

Наконец, этот код дает сбой, поскольку TreeView не будет отображать полосы прокрутки и прокрутки данных с нижней и / или правой стороны элемента управления (обратите внимание, что TreeView находится в StackPanel, а TreeView имеет значение Auto): 1017 *

<StackPanel >
                <controls:TreeView ItemTemplate="{StaticResource MainEntryIndexTemplate}" 
                                         x:Name="CodeBookIndexTreeView" Height="Auto" />
    </StackPanel>

Приветствия

Steve

Ответы [ 2 ]

4 голосов
/ 28 января 2009

Удалось выяснить это с помощью форумов Silverlight.net. Вы можете прочитать оригинальный вопрос и ответить здесь . Оказывается, что StackPanel, ориентированная вертикально (ориентация по умолчанию), даст своим дочерним элементам бесконечный размер, поэтому, поскольку TreeView имеет бесконечный размер, полосы прокрутки никогда не будут отображаться. Это НЕ происходит при использовании сетки в качестве элемента макета.

Следующий XAML отобразит полосы прокрутки TreeView, как и ожидалось. (Обратите внимание, что TreeView содержится во 2-й строке таблицы, а не в StackPanel и что для высоты TreeView установлено значение Auto.) В этом фрагменте кода есть несколько дополнительных элементов управления, потому что это было причиной появления дополнительного контейнера первое место:

<Grid>
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto"/>
                <RowDefinition Height="Auto"/>
                <RowDefinition Height="*"/>
            </Grid.RowDefinitions>
            <StackPanel Orientation="Horizontal" Grid.Row="0">
                <TextBlock Text="Enter Search Term" />
                <TextBox x:Name="SearchTermTextBox" Width="200" KeyUp="SearchTermTextBox_KeyUp"/>
            </StackPanel>
            <Button x:Name="SearchButton" Content="Search" Click="SearchButton_Click" Width="100" 
                      HorizontalAlignment="Left" Grid.Row="1" />
            <controls:TreeView ItemTemplate="{StaticResource MainEntryIndexTemplate}" 
                                     x:Name="CodeBookIndexTreeView" Height="Auto" Grid.Row="2" />
</Grid>
0 голосов
/ 28 января 2009

Да - StackPanels, кажется, не является отличным элементом управления для объектов переменного размера.

Аналогично; У меня были проблемы с DataTemplates, состоящими из текстовых блоков внутри стековой панели, используемых в качестве шаблонов ListItem в ListBox. Намерение заключалось в переносе текстового блока, но вместо этого он просто выходит за пределы поля списка, для которого не существует горизонтальной прокрутки. Лучшее, что мне удалось до сих пор, - это исправить ширину сетки, содержащей панели стека, но пока не нашел удовлетворительного решения ... хотелось бы знать, если она есть!

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