Общий метод найти весь TextBox управляет в Silverlight

Концептуально в шаблоне декоратора выходные данные одной обработки идут как входные данные для другой обработки.

Итак, в вашем случае это должно быть так:

getToppingFoo(getToppingBar(...(getXBaseSizePizzaCost())

, который разрешается в:

FooToppingCost + (BarToppingCost + ... ( Cost of pizza with base of X size )

Далее, вы можете определить фабричный класс для получения Pizza объекта различных размеров, скажем, Standard, Medium, Large. Логика одинакова независимо от того, какой язык вы выбираете.

11
задан Tim Cooper 25 September 2011 в 01:49
поделиться

3 ответа

Это кажется на необходимость в рекурсивной стандартной программе как GetTextBoxes ниже:

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);
            }
        }
    }
}

Инстанцируйте пустого списка TextBoxes. Назовите GetTextBoxes, передающий в корневом управлении на Вашей странице (в моем случае, это - это. LayoutRoot), и GetTextBoxes должен рекурсивно циклично выполниться через каждый элемент UI, который является потомком того управления, тестируя, чтобы видеть, является ли это любой TextBox (добавьте его к списку), или панель, которая могла бы иметь потомков самих по себе для рекурсивного вызова через.

Надежда, которая помогает.:)

10
ответ дан 3 December 2019 в 02:41
поделиться

Я уже столкнулся с этой проблемой и уведомляю ее здесь: http://megasnippets.com/en/source-codes/silverlight/Get_all_child_controls_recursively_in_Silverlight

Здесь у Вас есть общий метод найти рекурсивно в VisualTree весь TextBoxes:

IEnumerable<DependencyObject> GetChildrenRecursively(DependencyObject root)
{
    List<DependencyObject> children = new List<DependencyObject>();
    children.Add(root);
    for (int i = 0; i < VisualTreeHelper.GetChildrenCount(root); i++)
        children.AddRange(GetChildrenRecursively(VisualTreeHelper.GetChild(root, i)));

    return children;
}

Используйте этот метод как это для нахождения всего TextBoxes:

var textBoxes = GetChildrenRecursively(LayoutRoot).OfType<TextBox>();
14
ответ дан 3 December 2019 в 02:41
поделиться

От Вашей самой верхней панели можно сделать это (мою сетку называют ContentGrid),

var textBoxes = this.ContentGrid.Children.OfType<TextBox>();
var nonEmptyTextboxes = textBoxes.Where(t => !String.IsNullOrEmpty(t.Text));
foreach (var textBox in nonEmptyTextboxes)
{
    //Do Something
}

Однако это только найдет текстовые поля, которые являются непосредственными детьми. Своего рода рекурсия как ниже помогла бы, но я думаю, что должен быть лучший путь.

private List<TextBox> SearchForTextBoxes(Panel panel)
{
    List<TextBox> list = new List<TextBox>();
    list.AddRange(panel.Children.OfType<TextBox>()
        .Where(t => !String.IsNullOrEmpty(t.Text)));

    var panels = panel.Children.OfType<Panel>();
    foreach (var childPanel in panels)
    {
        list.AddRange(SearchForTextBoxes(childPanel));
    }
    return list;
}
3
ответ дан 3 December 2019 в 02:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: