suona come avete bisogno di un ricorsivo routine, come GetTextBoxes qui sotto:
void Page_Loaded(object sender, RoutedEventArgs e)
{
// Instantiate a list of TextBoxes
List<TextBox> textBoxList = new List<TextBox>();
// Call GetTextBoxes function, passing in the root element,
// and the empty list of textboxes (LayoutRoot in this example)
GetTextBoxes(this.LayoutRoot, textBoxList);
// Now textBoxList contains a list of all the text boxes on your page.
// Find all the non empty textboxes, and put them into a list.
var nonEmptyTextBoxList = textBoxList.Where(txt => txt.Text != string.Empty).ToList();
// Do something with each non empty textbox.
nonEmptyTextBoxList.ForEach(txt => Debug.WriteLine(txt.Text));
}
private void GetTextBoxes(UIElement uiElement, List<TextBox> textBoxList)
{
TextBox textBox = uiElement as TextBox;
if (textBox != null)
{
// If the UIElement is a Textbox, add it to the list.
textBoxList.Add(textBox);
}
else
{
Panel panel = uiElement as Panel;
if (panel != null)
{
// If the UIElement is a panel, then loop through it's children
foreach (UIElement child in panel.Children)
{
GetTextBoxes(child, textBoxList);
}
}
}
}
un'istanza di una lista vuota di caselle di testo. Chiama GetTextBoxes, passando il controllo di root sulla tua pagina (nel mio caso, questo è this.LayoutRoot), e GetTextBoxes dovrebbe ricorsivamente in loop attraverso ogni elemento dell'interfaccia utente che è un discendente di quel controllo, testando se è un TextBox (aggiungilo alla lista), o un pannello, che potrebbe avere dei discendenti di cui è il proprietario a recitare.
Spero che questo aiuti. :)
fonte
2009-03-02 23:25:31
Molte grazie! Questo è sicuramente quello che stavo cercando. Ora ho solo bisogno di vedere se posso la classe UIElement per estrarre più informazioni. (es. Controllo x: Nome se possibile) – coson
Non penso tu possa lanciare un 'ScrollViewer' come un' Panel', quindi se potresti aver bisogno di prenderne uno figlio, dovrai aggiungere un altro 'else' . – mbomb007