0

我填充了​​和50個Cell對象,所以每個Rectangle對象都有Cell作爲數據對象。現在,我想根據索引或單元格對象獲取相應的元素。例如,我想要獲得的index=15。不是數據,而是Rectangle本身。如何在WP7 ItemsControl的特定位置獲得UIElement?

我該怎麼做?

 public MainPage() 
     { 
      InitializeComponent(); 

      var cells = new List<Cell>();  
      for (int i = 0; i < 50; i++) 
      { 
       cells.Add(new Cell()); 
      }  
      icCells.ItemsSource = cells; 
     } 
     public void sector_Tap(object sender, System.Windows.Input.GestureEventArgs e) 
     { 
      //some code 
      //.... 
      var tappedRectangle = (sender as Rectangle); 
      var spesificRectangle = SOMEHOW_GET_RECTANGLE_AT_POSITION_15; 
     } 
    <ItemsControl Name="icBoard" Grid.Column="0" Margin="0"> 
       <ItemsControl.ItemTemplate> 
        <DataTemplate> 
         <Rectangle Fill="#501e4696" Width="30" Height="30" Margin="1" Tap="sector_Tap" /> 
        </DataTemplate> 
       </ItemsControl.ItemTemplate> 
       <ItemsControl.ItemsPanel> 
        <ItemsPanelTemplate> 
         <toolkit:WrapPanel /> 
        </ItemsPanelTemplate> 
       </ItemsControl.ItemsPanel> 
      </ItemsControl> 

回答

2

我相信這可能工作:

ContentPresenter contentPresenter = itemsControl.ItemContainerGenerator.ContainerFromIndex(15) as ContentPresenter; 
Rectangle rectangle= FindVisualChild<Rectangle>(contentPresenter); 
if (rectangle != null) 
{ 

} 

public static T FindVisualChild<T>(DependencyObject depObj) where T : DependencyObject 
{ 
    if (depObj != null) 
    { 
     for (int i = 0; i < VisualTreeHelper.GetChildrenCount(depObj); i++) 
     { 
      DependencyObject child = VisualTreeHelper.GetChild(depObj, i); 
      if (child != null && child is T) 
      { 
       return (T)child; 
      } 

      T childItem = FindVisualChild<T>(child); 
      if (childItem != null) return childItem; 
     } 
    } 
    return null; 
} 
+0

它不能在該行'VisualTreeHelper.GetChild(itemPresenter,15);'。我將15更改爲0,並且沒有提出錯誤,但它沒有返回Rectangle。這個'((WrapPanel)dependencyObject).Children'返回所有元素(50),但是我不能將它轉換爲Rectangle。那麼**兒童**的財產是什麼? – theateist 2012-01-28 22:47:04