1

在我的应用程序中,我将 ItemsControl 与 Canvas 作为 ItemsPanelTemplate。itemspanel source的Items是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>
4

2 回答 2

2

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

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

其次, aCanvas不会在它的孩子之后调整自己的大小。所以你有几个选择:

  • 使用带有单个单元格的 Grid 并使用Margin属性设置位置。
  • 计算最大尺寸并设置画布WidthHeight属性。
  • 从 Canvas 继承并覆盖 MeasureOverride 方法,以便它们反映孩子的大小。(见这个答案。)
于 2012-05-27T08:56:42.967 回答
0

我通过设置/更新CanvasHeight.

于 2021-09-09T03:27:36.423 回答