如何使用Canvas作为ItemsPaneltemplate在项目面板中显示ScrollBar

时间:2012-05-27 08:40:40

标签: wpf xaml

在我的应用程序中,我将带有Canvas的ItemsControl作为ItemsPanelTemplate。 itemspanel源项是thumb对象,可以拖放。如果项目退出屏幕视图,我不能滚动查看它们。我想怎么做? 我的代码在下面:

            <ItemsControl ScrollViewer.HorizontalScrollBarVisibility="Visible" ScrollViewer.VerticalScrollBarVisibility="Visible">
                <ItemsControl.ItemContainerStyle>
                    <Style>
                        <Setter Property="Canvas.Left" Value="{Binding XPosition}"/>
                        <Setter Property="Canvas.Top" Value="{Binding YPosition}"/>
                    </Style>
                </ItemsControl.ItemContainerStyle>
                <ItemsControl.ItemsPanel>
                    <ItemsPanelTemplate>
                        <Canvas/>
                    </ItemsPanelTemplate>
                </ItemsControl.ItemsPanel>
            </ItemsControl>

1 个答案:

答案 0 :(得分:2)

首先,您需要使用ItemsControl包围ScrollViewer(与ListBox不同,后者在其控件模板中包含它):

<ScrollViewer>
    <ItemsControl> ... </ItemsControl>
<ScrollViewer>

其次,Canvas在其子女之后不会自我调整大小。所以你有几个选择:

  • 使用包含单个单元格的网格,并使用Margin属性设置位置。
  • 计算最大尺寸并设置画布'WidthHeight属性。
  • 从Canvas继承并覆盖MeasureOverride方法,以便它们反映孩子的大小。 (见answer。)