Где и как мне реализовать ScrollViewer в моем XAML? - PullRequest
0 голосов
/ 18 ноября 2010

Итак, если (примерно) мое дерево XAML выглядит так:

<TabControl Name="tab1">
            <TabItem Header="Untitled" Name="tabMain">
                <Canvas Name="canvasTest" DockPanel.Dock="Right">
                <local:VisualsHost Canvas.ZIndex ="99" x:Name="vshMain"></local:VisualsHost>
                    <ListBox Name="lstTiles" DockPanel.Dock="Right" SelectionMode="Extended" PreviewMouseRightButtonDown="grdMain_MouseRightButtonDown" 
             PreviewMouseRightButtonUp="grdMain_MouseRightButtonUp" MouseDown="lstTiles_MouseDown" >
                    <ListBox.Template>
                        <ControlTemplate>
                            <ScrollViewer>
                                <ItemsPresenter />
                            </ScrollViewer>
                        </ControlTemplate>
                    </ListBox.Template>
                        <ListBox.ItemContainerStyle>
                            <Style>
                                <Setter Property="Grid.Row" Value="{Binding RelativeSource={x:Static RelativeSource.Self},
                    Path=Content.Row}"/>
                                <Setter Property="Grid.Column" Value="{Binding RelativeSource={x:Static RelativeSource.Self},
                    Path=Content.Column}"/>
                                <Setter Property="ListBoxItem.Height" Value="{Binding RelativeSource={RelativeSource Mode=FindAncestor,
                                AncestorType={x:Type Window}}, Path=lstboxHeight}" />
                                <Setter Property="ListBoxItem.Width" Value="{Binding RelativeSource={RelativeSource Mode=FindAncestor,
                                AncestorType={x:Type Window}}, Path=lstboxWidth}" />
                                <Setter Property="ListBoxItem.IsHitTestVisible" Value="True" />
                                <Style.Resources>
                                    <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Blue" Opacity=".3" />
                                    <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="Transparent" />
                                </Style.Resources>
                            </Style>
                        </ListBox.ItemContainerStyle>
                        <ListBox.ItemsPanel>
                            <ItemsPanelTemplate>
                                <Grid ShowGridLines="True" IsItemsHost="True" Background="{DynamicResource LoadedImage}" 
                      Name="grdMain"> 
                            </Grid>
                            </ItemsPanelTemplate>
                        </ListBox.ItemsPanel>
                    </ListBox>
            </Canvas>
        </TabItem>
    </TabControl>

Размещение прокрутки вокруг моего списка ничего не сделало.Размещение ControlTemplate, как вы видите выше, также ничего не делает.Ширина / высота моей сетки (которая, как вы видите, установлена ​​в моем шаблоне listboxitem) динамически увеличивается и уменьшается, но когда она выходит за пределы размера окна, полоса прокрутки по-прежнему отсутствует.

Ответы [ 2 ]

2 голосов
/ 18 ноября 2010

Поскольку ListBox находится в Canvas, его размер не будет изменен по мере изменения размера контейнера. Сам холст может выходить за пределы контейнера.

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

Используемые вами свойства прикрепленных DockPanel ничего не сделают для макета. Я бы предложил заменить Canvas контейнером Grid, который будет ограничивать размер списка.

0 голосов
/ 18 ноября 2010

Вы пытались поместить ScrollViewer вокруг своей сетки внутри ItemsPanelTemplate?

    <ScrollViewer>
        <Grid ShowGridLines="True" IsItemsHost="True" Background="{DynamicResource LoadedImage}"  
                  Name="grdMain">
        </Grid>
    </ScrollViewer>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...