c# wpf определяет, есть ли у элемента атрибут, определенный в исходном xaml - PullRequest
0 голосов
/ 01 апреля 2020

Я новичок в c# и задаюсь вопросом, может ли кто-нибудь помочь мне быстро

Я хотел бы программно определить, есть ли у элемента xaml атрибут, определенный, например:

// xaml

<Grid>
    <TextBlock Tag="tab" />
    <TextBlock />
</Grid>

Первый TextBlock имеет атрибут «tag», второй не

Я бы хотел, чтобы этот метод был таким общим, что:

<Grid>
    <TextBlock Margin="10" />
    <TextBlock />
</Grid>

первый TextBlock имеет атрибут margin, второй не

В конечном итоге я пытаюсь написать функцию GetChildrenByAttr (parent, attr), которая возвращает дочерние элементы с атрибутом, определенным

1 Ответ

0 голосов
/ 01 апреля 2020

У меня есть какое-то решение:

public IList<DependencyObject> GetChildrenByAttribute<TElement, TValue>(TElement element, DependencyProperty property, Func<TValue, bool> predicate) where TElement : DependencyObject
{
    List<DependencyObject> result = new List<DependencyObject>();
    for (var i = 0; i < VisualTreeHelper.GetChildrenCount(element); i++)
    {
        var child = VisualTreeHelper.GetChild(element, i);
        if (predicate((TValue)child.GetValue(property)))
            result.Add(child);
    }
    return result;
}

И как это назвать:

var result = GetChildrenByAttribute<Grid, String>(Main, TagProperty,
            value => value == "TestTag");

И XAML-шаблон:

<Grid x:Name="Main">
    <TextBlock Tag="TestTag"/>
    <TextBlock/>
</Grid>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...