Проблемы с TemplateBinding

У меня есть расширение XAML SomeExtension, которое оформляется так:

<Rectangle Fill={SomeExtension <address of brush>}/>

Но когда я пытаюсь вместо <address of brush> подставить {TemplateBinding Content} (сам xaml-тэг Rectangle внутри ControlTemplate'а):

<Rectangle Fill={SomeExtension {TemplateBinding Content}}/>

то внутри кода расширения я получаю не контент, а объект типа TemplateBindingExpression. У него есть свойство TemplateBindingExtension, которое возвращает экземпляр одноимённого класса. У второго есть метод ProvideValue, и когда я его вызываю я опять получаю не контент, а TemplateBindingExpression. Замкнутый круг.


Что это за TemplateBindingExpression? Почему он так работает? Как мне взять и получить контент?


Код ProvideValue метода моего расширения:

public override object ProvideValue(IServiceProvider provider)
{
    var content = Content /*свойство*/ is TemplateBindingExtension /*expression до этого преобразованно в extension*/ binding ?
        binding.ProvideValue(provider) : Content;

        // прочая обработка
}

EDIT:

Я использую SomeExtension внутри стиля в 2-х местах:

  1. {SomeExtension MyBrush}
  2. {SomeExtension {TemplateBinding Content}} (вместо Content может быть любое другое свойство)

1-й случай работает корректно - возвращает кисть по адресу MyBrush. 2-й - нет. Вместо ожидаемой кисти по адресу, равному контенту, он возвращает какой-то TemplateBindingExpression, из которого значение контента получить нельзя, но очень хочется. Как это сделать?


Ответы (0 шт):