ScrollViewer内容滚动窗口的其他部分

时间:2014-06-25 07:20:42

标签: wpf scroll

我将以下内容作为我的XAML的一部分:

<DockPanel>
    <ToolBar Name="toolbar1" DockPanel.Dock="Top" Height="41" Background="#FFA5D95A">
        //other controls
    </ToolBar>
    <ScrollViewer>
        <ListBox Name="listBox1" ItemsSource="{Binding ElementName=This, Path=Items}" 
                 ItemTemplateSelector="{StaticResource entryItemTemplateSelector}">
            <ListBox.Template>
                <ControlTemplate>
                    <WrapPanel IsItemsHost="True" />
                </ControlTemplate>
            </ListBox.Template>
        </ListBox>
    </ScrollViewer>
</DockPanel>

我希望scrool bar将ListBox中的项目移动到WrapPanel的顶部,然后在它们到达顶部时停止显示它们;相反,这些项目会滚动到顶部的工具栏中。

Image of the content scrolled too far

我做错了什么?

注意:Haing被问到,这是我目前拥有的DataTemplates; EntryItemHost是从WindowsFormsHost派生的类型。

    <DataTemplate x:Key="folderTemplate">
        <my:EntryItemHost Item="{Binding}" 
                          Background="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=my:MainWindow, AncestorLevel=1}, Path=Background}" 
                          DoubleClick="FolderDoubleClick" />
    </DataTemplate>
    <DataTemplate x:Key="imageTemplate">
        <my:EntryItemHost Item="{Binding}" 
                          Background="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=my:MainWindow, AncestorLevel=1}, Path=Background}" />
    </DataTemplate>

1 个答案:

答案 0 :(得分:0)

而不是设置ListBox Template设置ItemsPanel并删除ScrollViewer

样品

<DockPanel>
    <ToolBar Name="toolbar1"
             DockPanel.Dock="Top"
             Height="41"
             Background="#FFA5D95A">
        //other controls
    </ToolBar>
    <ListBox Name="listBox1" ItemsSource="{Binding ElementName=This, Path=Items}" 
             ItemTemplateSelector="{StaticResource entryItemTemplateSelector}">
        <ListBox.ItemsPanel>
            <ItemsPanelTemplate>
                <WrapPanel Width="{Binding ActualWidth, RelativeSource={RelativeSource FindAncestor, AncestorType=ContentPresenter}}" />
            </ItemsPanelTemplate>
        </ListBox.ItemsPanel>
    </ListBox>
</DockPanel>

请注意我已将ItemsPanel替换为模板并将宽度限制为列表框

我根据假设做了这个,让我知道这不是你想要的