ItemsControl внутри существующего холста - PullRequest
2 голосов
/ 14 ноября 2011

Я пытаюсь выполнить следующее.

1) У меня на странице есть элемент управления canvas с фоновым изображением, которое можно масштабировать и панорамировать. Это работает хорошо с тем, что у меня есть. 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>

и задайте ItemsSource для POIPresenter в коде позади, но пользовательские элементы управления отображаются друг над другом слева (на уровне 0,0).

Я пытался переместить объявления холста внутри ItemsPanelTemplate, но мои объявления об установке масштаба / центра изображения не работают - они не могут найти элемент управления PanoCanvas.

Кто-нибудь может указать на болезненно очевидную вещь, которую я здесь делаю, пожалуйста?

Заранее спасибо.

1 Ответ

1 голос
/ 14 ноября 2011

Для начала вы можете упростить следующее:

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

То есть используйте один Canvas вместо двух.

Кроме этого, ищите ошибки привязки в окне вывода. Возможно, свойства TopPosition и LeftPosition не разрешены правильно.

...