Используйте IServiceProvider
, чтобы получить IProvideValueTarget
, затем посмотрите на TargetProperty
, которое должно (но не обязательно) быть DependencyProperty
.
var provideValueTarget = (IProvideValueTarget)serviceProvider.GetService(typeof(IProvideValueTarget));
var propertyType = (provideValueTarget.TargetProperty as DependencyProperty)?.PropertyType;
// Test propertyType for null
Свойство target также может быть EventInfo
, если MarkupExtension используется с событием, или MethodInfo
, если оно используется с прикрепленным событием (или, как вы указали в комментариях, PropertyInfo
, если используется с обычным свойством).
К сожалению, я думаю, что это единственный способ сделать это. DynamicResourceExtension
имеет аналогичные проверки, см. здесь и здесь - если бы был лучший API, я предполагаю, что он будет использовать его.