2011-11-14 10 views
2

私は以下を達成しようとしています。ItemsControl既存のキャンバス内

1)私のページには、スケーラブルでパン可能な背景画像を持つキャンバスコントロールがあります。これは私が持っているものでOKです。 2)キャンバス内に一連のコントロールを表示します。これは、Bingのホームページに表示されている画像にホットスポットが表示される方法と似ていると考えられます。画像がパン/ズームされると、コントロールはキャンバス上を移動する必要があります。

Iは、次

<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> 

、1 Canvas代わりに2を使用します。

それ以外の場合は、出力ウィンドウでバインドエラーを探します。おそらくTopPositionLeftPositionのプロパティが正しく解決されていない可能性があります。

+0

これは私が試みたものです(ItemsPanelTemplate内のキャンバスを単純化しています)が、後ろのコードから参照できませんでした。もう一度やり直しましょう。間違っていたかもしれません... – ZombieSheep

+0

「ItemsPanelTemplate」によって生成されたため、簡単には参照できません。あなたはそれを得るために 'VisualTreeHelper'のようなものを使用しなければなりません。あなたの主な問題はどうですか?それは拘束力のある問題ですか? –

+0

出力ウィンドウに何も表示されず、他のプロパティがコントロール自体に期待どおりにバインドされています。 – ZombieSheep

関連する問題