Программно получить список элементов управления, которые поставляются с .NET 4.0

#c# #wpf

#c# #wpf

Вопрос:

Что я хочу сделать, так это создать список всех элементов управления WPF, которые поставляются с .NET 4. В идеале, этот список должен был бы представлять собой набор строковых объектов, таких как «Button», «ListBox» и т.д.

Буду признателен за любую помощь!

Крис

Ответ №1:

Это приведет к извлечению всех подклассов FrameworkElement в PresentationFramework сборке

 var query =
    from type in typeof(FrameworkElement).Assembly.GetTypes()
    where type.IsSubclassOf(typeof(FrameworkElement))
    select type.Name;

List<string> controls = query.ToList();
  

Примечание: в WPF нет очень четкого определения того, что такое «элемент управления» … есть Control класс, но не все элементы пользовательского интерфейса наследуются от него. Большинство «элементов управления» наследуются (прямо или косвенно) от FrameworkElement .

Комментарии:

1. Я думаю, вы имели в виду GetTypes , не GetType .

Ответ №2:

Если вам действительно нужны все из них, вы можете выполнить поиск по соответствующим сборкам с помощью отражения и найти любые конкретные классы, которые наследуются от базового класса control.

Ответ №3:

 var names = typeof(FrameworkElement)
    .Assembly
    .GetExportedTypes()
    .Where(x => x.IsSubclassOf(typeof(FrameworkElement)))
    .Select(x => x.Name);