2014-02-24 48 views
2

所以,如果我有一個項目控件,並希望在代碼背後獲得畫布,我該怎麼辦?我可以獲取itemscontrol,但是我該如何檢索畫布?我試過wpf如何從代碼後面的itemspaneltemplate中獲取畫布?

Canvas c1 = ic.FindName("MarkerCanvas") as Canvas; 

其中ic是itemscontrol。我也嘗試了itemscontrol的各種模板下的findname函數,但效果並不理想。我該怎麼做?

 <ItemsControl 
      > 
      <ItemsControl.ItemsPanel> 
      <ItemsPanelTemplate> 
       <Canvas 
       x:Name="MarkerCanvas" 
       SnapsToDevicePixels="false" 
       /> 
      </ItemsPanelTemplate> 
      </ItemsControl.ItemsPanel> 
    </ItemsControl 
      > 

回答

2

我發現了這一點,並測試它的工作:

How can I find WPF controls by name or type?

只是改變調用

Canvas foundCanvas =UIHelper.FindChild<Canvas>(Application.Current.MainWindow, "MarkerCanvas"); 
+0

沒有計劃使用這個最初的原因,我認爲模板本身的findname函數應該可以工作,但是如果模板還沒有被應用,它似乎不工作,所以使用這個更容易功能。 –

1

如果你有一些東西,是Canvas的孩子,說myControl,那麼這應該工作:

var dObj = myControl as DependencyObject; 
while (!(dObj is Canvas && (dObj as Canvas).Name == "MarkerCanvas")) dObj == VisualTreeHelper.GetParent(dObj); 
相關問題