Найти управление от LayoutRoot в Silverlight - PullRequest
5 голосов
/ 22 февраля 2011

У меня есть несколько текстовых блоков в моем пользовательском элементе управления Layoutroot, проблема в том, как найти конкретный текстовый блок по его имени?

Thanx

Ответы [ 3 ]

7 голосов
/ 22 февраля 2011
var myElement =
    ((FrameworkElement)System.Windows.Application.Current.RootVisual)
        .FindName("TextBlockName");

должно работать в этом случае, если текстовый блок уже обработан.

Чтобы иметь возможность легко проходить по визуальному дереву в более общем смысле, как упомянуто @ColinE, вы также можете использовать набор инструментов Silverlight.

// requires System.Windows.Controls.Toolkit.dll
using System.Windows.Controls.Primitives;

var myElement = myRoot.GetVisualDescendants().OfType<TextBlock>()
    .Where(txb => txb.Name == "TextBlockName").FirstOrDefault();
3 голосов
/ 22 февраля 2011

Если вы создаете UserControl, любой элемент, который вы называете с помощью x:Name, должен быть доступен вам как поле в вашем коде.

Если вы не создаете UserControl, вы можете выполнить поисквизуальное дерево через Linq to VisualTree ...

TextBlock block = LayoutRoot.Descendants<TextBlock>()
                            .Cast<TextBlock>()
                            .SingleOrDefault(t => t.Name == "TextBlockName");
1 голос
/ 13 июля 2015

Эй, Масн, я написал некоторый код и схожие условия в моем случае, что все в порядке. это имеет место (иметь много списков и именованных переменных, различающихся по номеру в конечном имени) Пример: listAttachment1, listAttachment2, listAttachment3, .. и т. д.). Для лучшего объяснения покажите мой код:

public void refreshAttachmentList (ListlistOfControlsRequest, int identifier) {

    string valueName = "attachmentsField_"+identifier;

        var mylistAttachment = ((FrameworkElement)System.Windows.Application.Current.RootVisual).FindName(valueName);
        ListBox listAttachRequest = mylistAttachment as ListBox;

        listAttachRequest.ClearValue(ItemsControl.ItemsSourceProperty);
        listAttachRequest.ItemsSource = listOfAttachmentsControls;
        listAttachRequest.....all properties

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...