A TypeConverter предназначен для преобразования из одного типа в другой. Существует несколько стандартных функций, таких как BrushConverter , ColorConverter , BooleanConverter и так далее. Смотрите здесь для полного списка. Что хорошо в преобразователях типов, так это то, что их можно применять к определению свойства, используя следующее определение атрибута в определении класса ...
[TypeConverterAttribute(typeof(BrushConverter)]
public Brush Background
{
...
}
... реализация BrushConverter знает, что, если он получает строку в качестве входных данных, он должен попытаться преобразовать ее в известный экземпляр SolidBrush цвета. Это означает, что вашему XAML не нужно назначать фактическую ссылку SolidBrushes.Red на свойство, а вместо этого использовать простую строку ...
<Button Background="Red" />
... это гораздо быстрее написать и понять. Однако TypeConverter ВСЕГДА вызывается для назначения свойства, и вы не можете запретить XAML вызывать TypeConverter для вызова.
A MarkupExtension используется для возврата объекта, который затем назначается указанному свойству. Это более гибко, потому что вы можете решить, когда и где использовать MarkupExtension, и вы не ограничены определенными свойствами, которые были предварительно помечены атрибутом. Примерами расширений разметки являются Binding, StaticResource и DynamicResource.
Таким образом, преобразователь типов отлично подходит для определенных свойств определенного типа, для которого вы хотите принять больший диапазон значений, чем определяет сам тип. Расширение разметки отлично подходит для более общего использования, когда разработчик решает, когда и где его использовать