2011-12-19 55 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 2011-12-19 16:42:43

回答

5

您的Where正在篩選出子女,這是UIElement的集合,它沒有Children屬性。你也需要將它投射到StackPanel。但是,而不是,OfType救援:

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

OfType會過濾出該類型的不是,同時它們轉換爲該類型的項目。

0

問題是,「var」語法從語句的右側在編譯時派生類型。

即使您已經使用「Where」顯式選擇了第一個使用「Where」的StackPanel,編譯時的派生類型仍然是UIElement。 UIElement沒有Children屬性。

您需要使用「(StackPanel)」或「as」將該語句的結果明確地轉換到StackPanel。