2011-11-14 66 views
2

我想完成以下內容。ItemsControl現有的畫布內

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

對於初學者來說,可以簡化爲:

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

也就是說,使用一個Canvas而不是兩個。

除此之外,在輸出窗口中查找綁定錯誤。可能TopPositionLeftPosition屬性沒有被正確解析。

+0

這就是我所嘗試的(簡化了ItemsPanelTemplate中的畫布),但後來我無法從後面的代碼中引用它。我會再給它一次 - 也許我做錯了...... – ZombieSheep

+0

好吧,忘了 - 你不能輕易地引用它,因爲它是由'ItemsPanelTemplate'生成的。你必須使用像VisualTreeHelper這樣的東西來獲取它。你的主要問題呢?這是一個有約束力的問題? –

+0

我在輸出窗口中看不到任何內容,其他屬性在控件本身中按預期進行綁定。 – ZombieSheep