0

​​に50 Cellオブジェクトを記入したので、それぞれRectangleオブジェクトはデータオブジェクトとしてCellです。今、インデックスまたはセルオブジェクトに応じて対応するRectangle要素を取得します。たとえば、index=15Rectangleを入れたいとします。データではなく、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

関連する問題