Можно ли узнать, какие сеттеры доступны в стиле в wpf? - PullRequest
2 голосов
/ 11 апреля 2011

Я скачал сборку с классом.Класс предоставляет свойство стиля, позволяющее настраивать внешний вид.Можно ли узнать, какие все возможные свойства сеттера позволят ему создать объект стиля?(например, глядя на дизассемблирование и т..)

Ответы [ 2 ]

2 голосов
/ 11 апреля 2011

Я не знал точно, в какой вы ситуации, когда я читал ваш вопрос.Посмотрев на него снова, кажется, что вы пытаетесь выяснить, какие свойства можно установить в ваших стилях для объекта.Это будет означать, что вас заинтересуют не зависящие от чтения свойства зависимости, доступные для объекта зависимости.Конечно, есть предостережение о том, что объект может не обязательно использовать все свойства для визуализации.Поэтому не удивляйтесь, если вы установите некоторые свойства, и ничто не изменится.

Просто используйте отражение для поиска всех полей DependencyProperty и получения значений (если объекты следуют соглашениям для объявления свойств зависимостей),Вы можете использовать это, чтобы получить такие свойства.

public static IEnumerable<DependencyProperty> GetDependencyProperties(DependencyObject owner)
{
    var type = owner.GetType();
    var flags = BindingFlags.Public | BindingFlags.Static | BindingFlags.FlattenHierarchy;
    return type.GetFields(flags)
               .Where(fi => fi.FieldType == typeof(DependencyProperty))
               .Select(fi => fi.GetValue(null))
               .Cast<DependencyProperty>();
}

// get the non-readonly dependency properties
var writableDPs = GetDependencyProperties(myObject)
    .Where(dp => !dp.ReadOnly);
0 голосов
/ 11 апреля 2011

Предложение Джеффа Меркадо звучит довольно хорошо, например, я просто использовал это на пользовательском элементе управления:

var props = typeof(PanAndZoomControl).GetProperties()
    .Where(x => x.CanWrite)
    .Select(x => x.Name);
MessageBox.Show(String.Join(", ", props));

A screenshot

Я использовал разделитель запятых, чтобы сделать его более компактным, вы можете просто вывести его в текстовый файл, используя File.WriteAllLines() или что-то подобное.

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