WPF ItemsControl滚动条

时间:2014-07-27 15:03:26

标签: wpf scrollbar itemscontrol

使用ItemsControl显示Canvas上的项目集合。 Probelm是我无法看到我屏幕上的所有项目(需要使用Scrollbars),我已经检查了这个post并尝试了相同的但它对我不起作用, Scrollbar已显示但已停用。我的XAML:

<Grid>
    <DockPanel>
        <ScrollViewer>
            <ItemsControl ItemsSource={Binding MyCollection}>
                <ItemsControl.ItemsPanel>
                    <ItemsPanelTemplate>
                        <Canvas />
                    </ItemsPanelTemplate>
                </ItemsControl.ItemsPanel>
                <ItemsControl.ItemTemplate>
                    <DataTemplate>
                        ....
                    </DataTemplate>
                </ItemsControl.ItemTemplate>
            </ItemsControl>
        </ScrollViewer>
    </DockPanel>
</Grid>

1 个答案:

答案 0 :(得分:8)

ItemsControl 默认 在其模板中没有ScrollViewer ,而不像ListBox。

删除外部scrollViewer并将ItemsControl的模板设置为包含ScrollViewer。另外,当你已经在Grid中包装ItemsControl时,我没有看到DockPanel的任何用法。

更改这样的布局:

<Grid>
    <ItemsControl ItemsSource={Binding MyCollection}>
        <ItemsControl.Template>
            <ControlTemplate>
                <Border
                    BorderThickness="{TemplateBinding Border.BorderThickness}"
                    Padding="{TemplateBinding Control.Padding}"
                    BorderBrush="{TemplateBinding Border.BorderBrush}"
                    Background="{TemplateBinding Panel.Background}"
                    SnapsToDevicePixels="True">
                    <ScrollViewer
                        Padding="{TemplateBinding Control.Padding}"
                        Focusable="False">
                        <ItemsPresenter SnapsToDevicePixels="{TemplateBinding 
                                               UIElement.SnapsToDevicePixels}"/>
                    </ScrollViewer>
                </Border>
            </ControlTemplate>
        </ItemsControl.Template>
        <ItemsControl.ItemsPanel>
            <ItemsPanelTemplate>
                <Canvas />
            </ItemsPanelTemplate>
        </ItemsControl.ItemsPanel>
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                ....
            </DataTemplate>
        </ItemsControl.ItemTemplate>
    </ItemsControl>
</Grid>