2011-12-19 3 views
0
private void button_Click(object sender, RoutedEventArgs e) 
{ 
    var button = (Button) sender; 

    var stackPanel = button.Parent as StackPanel; 
    var childStackPanel = stackPanel.Children.Where(a => a is StackPanel).FirstOrDefault(); 

    // var textbox = childStackPanel.Children.Where(a => a is StackPanel).FirstOrDefault(); 
} 

Невозможно получить элемент в элементе, текстовое поле в этом случае.Как найти вложенные элементы в Silverlight

Но это ошибка, когда я код chidStackPanel.Children. Нет детей.

+0

UIElement не имеет детей. Может быть, вам следует дать некоторые подробности о том, что вы хотите сделать, потому что я уверен, что должен быть лучший способ, чем использовать свойства «Дети» ... – ken2k

ответ

5

Where фильтрует детей, являющихся коллекцией UIElement, не имеющей Children. Вам нужно также отправить его на StackPanel. Но вместо того, что OfType на помощь:

var childStackPanel = stackPanel.Children.OfType<StackPanel>().FirstOrDefault(); 

OfType отфильтровывает элементы, которые не этого типа, а также литье их к этому типу.

0

Проблема заключается в том, что синтаксис «var» выводит тип во время компиляции из правой части инструкции.

Даже если вы явно выбрали первый дочерний элемент, который является StackPanel, используя «Where», производный тип во время компиляции все равно будет UIElement. У UIElement нет свойства Children.

Вам нужно будет явно передать результат этой инструкции в StackPanel с помощью «(StackPanel)» или «as».