2011-10-05 142 views
2

我有一個帶有Canvas ItemsPanel的ListBox。 LabeledArrow只是一個視圖模型類(非可視化),它公開了像Start_X,Start_Y(箭頭起點),End_X,End_Y(箭頭)和Box_X,Box_Y(方塊位置)等屬性的視圖模型類(不可視)下面顯示了LabeledArrow的ListBoxItem DataTemplate。
ArrowLine X1,Y1,x2,Y2與LabeledArrow Start_X,Start_Y等屬性的綁定工作正常,因爲ArrowLine具有公開的座標屬性(X1等)。不過,這個盒子只是TextBlock,所以我必須設置Canvas.Top和Canvas.Left attatched屬性來定位它 - 但是如下所示的綁定不起作用。
任何想法? 我是否需要打包LabeledArrow作爲UserControl?ListBox將DataTemplate項綁定到ItemsPanel Canvas.Left/Top

<ListBox.Resources>   
<DataTemplate DataType="{x:Type tp:LabledArrow}"> 
    <Grid> 
    <tp:ArrowLine Stroke="Red" StrokeThickness="2" 
      X1="{Binding Path=Start_X}" Y1="{Binding Path=Start_Y}" 
      X2="{Binding Path=End_X}" Y2="{Binding Path=End_Y}" /> 
    <TextBlock Text="{Binding Path=Value}" 
       **Canvas.Left="{Binding Path=Box_X}" 
       Canvas.Top="{Binding Path=Box_Y}"** /> 
    </Grid> 
</DataTemplate> 
</ListBox.Resources> 

<ListBox.ItemsPanel> 
    <ItemsPanelTemplate> 
     <Canvas IsItemsHost="True" /> 
    </ItemsPanelTemplate> 
</ListBox.ItemsPanel> 

回答

2

您設置的附加屬性Canvas.LeftCanvas.Top你的文本框,但TextBox的父是一個網格。附加屬性有時用於告訴Control的父級如何佈置此元素。例如Canvas,Grid和DockPanel。你想要的是在物品容器上設置兩個屬性,這是Canvas的直接子節點。該容器使用DataTemplate來顯示其內容。

要做到這一點添加到您的列表框

<ListBox.ItemContainerStyle> 
    <Style> 
     <Setter Property="Canvas.Left" Value="{Binding Path=Box_X}"/> 
     <Setter Property="Canvas.Top" Value="{Binding Path=Box_Y}"/> 
    </Style> 
</ListBox.ItemContainerStyle> 
+0

是TextBox不是畫布的直接子項,這是問題。但是我不想使用樣式來設置包裝我的LabeledArrow的整個ListBoxItem的Canvas.Top/Left,因爲這弄亂了我的箭頭部分的位置。如果我只是顯示一個可以工作的文本框。 – Ricibob

+0

您沒有太多其他選項。箭頭的位置當然必須改變以考慮新的父母位置。其他選項涉及更多的代碼,可能會更混亂。這是我能給你的唯一解決方案,事實上它與我們用於圖表控制的方法相同。 – dowhilefor

+0

好的 - 經過一番考慮後,我認爲你的權利 - 這是最簡單的解決方案。乾杯。 (我檢查了你的articy:草稿應用程序的屏幕截圖 - 看起來不錯!) – Ricibob

0

只是胡亂猜測......

  1. 你可以在一個Canvas代替Grid
  2. 然後,讓你包裹孩子LabledArrow您座標TextBlock相對於當地的Canvas減去... Box_XStart_XBox_YStart_Y (使用multibinding和轉換器這樣做)

我認爲這將被安裝到你渴望的座標相對畫布......是不是?

+0

我認爲你的建議類似於dowhilefor,可能會工作 - 但我現在有一些工作,只是通過grid/listboxitem偏移箭頭位置,所以我會以此運行。乾杯。 – Ricibob

相關問題