Прежде всего, и извиняемся за то, что это не отвечает на ваш вопрос, вы можете сэкономить много хлопот и написать более качественный код, подобный этому:
using System.Linq;
public IEnumerable<T> GetUIElements<T>() where T : DependencyObject
{
return myCanvas.Children.OfType<T>();
}
Как только код в этой форме, вы можете увидетьчто в действительности нет никакой необходимости в какой-либо функции, поэтому ваш исходный вопрос может быть неприменим.
Если вам все еще нужно параметризировать myCanvas
, есть хорошие и плохие новости.Плохая новость заключается в том, что вам абсолютно необходимо найти базовый класс со свойством Children
, а иерархия элементов управления WPF не самая чистая.Вполне могут быть элементы управления, которые предоставляют Children
свойства, которые не связаны друг с другом, и в этом случае вы не можете многое сделать (вы можете передать DependencyObject
и начать приведение типов, но это действительно грязно).
Хорошая новость заключается в том, что есть очень хорошие LINQ-to-WPF-деревья адаптеры , которые могут это сделать, и многое другое, без необходимости писать код.