Frage

Also, wenn (in etwa) mein XAML Baum ist wie so:

<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>

Inbetriebnahme des Scroll um meine listbox tat nichts. Platzieren des Control wie Sie oben tut auch nichts zu sehen. Meine Grids Breite / Höhe (die, wie Sie sehen, ist meine ListBoxItem Vorlage eingestellt) dynamisch erweitert und schrumpft nach unten, aber wenn es sich ausdehnt über die Größe des Fensters noch keine Bildlaufleiste.

War es hilfreich?

Lösung

Da die List-Box innerhalb Canvas ist, wird es nicht seine Größe wie die Behälter komprimiert die Größe angepasst. Die Leinwand selbst kann über die Grenzen des es des Behälters erstrecken.

ListBox hat Scroll in für gebaut, wenn die Liste Inhalt der maximalen Größe des ListBox überschreitet, aber Sie werden nie mehr als diese Größe, da die List-Box wird nur wachsen, weil sie nicht durch die Leinwand beschränkt ist.

Die DockPanel angebracht Eigenschaften, die Sie verwenden, werden für das Layout nichts tun. Ich würde vorschlagen, die Leinwand mit einem Grid-Container zu ersetzen, die die Listbox Größe zurückhalten wird.

Andere Tipps

Haben Sie versucht, in der Itemspaneltemplate eine Scroll um Ihre Grid setzen?

    <ScrollViewer>
        <Grid ShowGridLines="True" IsItemsHost="True" Background="{DynamicResource LoadedImage}"  
                  Name="grdMain">
        </Grid>
    </ScrollViewer>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top