2010-11-28 5 views

답변

5
var target = myGrid.Children 
      .Cast<UIElement>() // make it into IEnumerable<UIElement> 
      .OfType<Rectangle>() // and select only Rectangles 
      .Where(c => Grid.GetRow(c) == 3); 

이 그리드의 자식을 열거 및 유형 Rectangle의이고 Grid.Row가 == 3. 다음 target.Single() 또는 target.First() 또는 기타 쿼리 평가 기능을 사용할 수 있습니다이있는 만 선택됩니다 Rectangle에 액세스 할 수 있습니다.

업데이트 : 아래 이안의 코멘트를 해결하기 위해 업데이트

. 아주 잘 말했어, 나는 완전히 동의한다 (원래 예제 코드에 너무 많은 생각을하지 않았다).

+1

Panel.Children은 이전의 제네릭 컬렉션 인터페이스 만 구현하므로 예제가 그대로 컴파일되지 않습니다. ". Children"과 ".Where"사이에 ".Cast ()"을 입력하여이 문제를 해결할 수 있습니다. 또한 유형별로 필터링하는 연산자를 사용하여 람다를 단순화 할 수 있습니다. myGrid.Children.Cast () .OfType () .Where (c => Grid.GetRow (c) == 3); - "OfType ()"이 의도를 더 명확하게 표현한 것 같습니다. –

관련 문제