ItemsControl在现有Canvas中

时间:2011-11-14 14:08:43

标签: c# xaml itemscontrol windows-8

我正在努力完成以下任务。

1)在我的页面上有一个画布控件,背景图像是可伸缩的,可以扩展的。这与我所拥有的一切正常。 2)在画布中显示一组控件。这被设想类似于Bing主页在其上显示的图像上显示热点的方式。

,当图像被平移/缩放时,控件需要在画布上移动

我尝试了以下

    <Canvas Name="PanoCanvas" >
        <Canvas.Background>
            <ImageBrush x:Name="PanoImage" ImageSource="/Images/OtherImages/PanoBackound.jpg" Stretch="None" />
        </Canvas.Background>
        <ItemsControl Name="POIPresenter">
            <ItemsControl.ItemTemplate>
                <DataTemplate>
                    <uc:PointOfInterest />
                </DataTemplate>
            </ItemsControl.ItemTemplate>
            <ItemsControl.ItemsPanel>
                <ItemsPanelTemplate>
                    <Canvas />
                </ItemsPanelTemplate>
            </ItemsControl.ItemsPanel>
            <ItemsControl.ItemContainerStyle>
                <Style TargetType="ContentPresenter">
                    <Setter Property="Canvas.Top" Value="{Binding TopPosition}" />
                    <Setter Property="Canvas.Left" Value="{Binding LeftPosition}" />
                </Style>
            </ItemsControl.ItemContainerStyle>
        </ItemsControl>
    </Canvas>

并在后面的代码中设置POIPresenter的ItemsSource,但是用户控件在左侧(0,0)显示在另一个上面。

我尝试在ItemsPanelTemplate中移动画布声明,但是我设置图像缩放/中心的声明不起作用 - 他们找不到PanoCanvas控件。

有人能指出我在这里做的非常明显的事吗,拜托?

提前致谢。

1 个答案:

答案 0 :(得分:1)

对于初学者,您可以简化如下:

<ItemsControl ...>
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <Canvas>
                <Canvas.Background>...</Canvas.Background>
            </Canvas>
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
</ItemsControl>

也就是说,使用一个Canvas而不是两个。

除此之外,在输出窗口中查找绑定错误。可能未正确解析TopPositionLeftPosition属性。