ContentPresenter TextBlock.FontFamily привязка не работает - PullRequest
0 голосов
/ 16 мая 2019

У меня есть ContentPresenter и я хочу визуализировать каждый элемент с использованием другого шрифта, привязав его к FontFamily, но он не работает.Странная часть в том, что привязка работает для TextBlock, но не для ContentPresenter?Вот мой xaml

<ContentPresenter 
    Width="100"
    Content="{Binding Name}"
    TextBlock.FontFamily="{Binding TextFont}"
    TextBlock.Foreground="{Binding BindedTextColor}"/>
<TextBlock
    Text="{Binding FontName}"
    FontFamily="{Binding TextFont}"
    Foreground="{Binding BindedTextColor}"/>

, который отображает это:

enter image description here

И TextBlock, и ContentPresent связывают свои FontFamily с TextFont.Почему слово «residential» также не отображается в семействе алжирских шрифтов?

Если я заменю TextBlock.FontFamily="{Binding TextFont}" на такой аппаратный код, как этот TextBlock.FontFamily="Algerian", я получу это

enter image description here

Как мне заставить работать с привязкой?

1 Ответ

1 голос
/ 16 мая 2019

Если вы посмотрите на панель «Вывод» в VS во время выполнения, вы обнаружите, что привязки на ContentPresenter смотрят на DataContext ContentPresenter для свойств TextFont и BindedTextColor, как и ожидалось - ноDataContext не то, что вы ожидаете.Это свойство ContentPresenter Content.

ContentPresenter - это очень специализированный элемент управления.Вы не хотите один здесь.Используйте его только по указанию, в ControlTemplate.Для этого приложения используйте ContentControl или Label.

Если вы установите эти свойства без привязки, DataContext не будет проблемой, и вы получите то, что ожидаете.

Ошибка System.Windows.Data: 40: Ошибка пути BindingExpression: свойство 'TextFont' не найдено для объекта '' 'Строка' (HashCode = 966822854) '.BindingExpression: Path = TextFont;DataItem = 'String' (HashCode = 966822854);Целевым элементом является ContentPresenter (Name = '');Свойство target - «FontFamily» (тип «FontFamily»)

System.Windows.Data Ошибка: 40: ошибка пути BindingExpression: свойство «BindedTextColor» не найдено для «объекта» «String» (HashCode = 966822854)».BindingExpression: Path = BindedTextColor;DataItem = 'String' (HashCode = 966822854);Целевым элементом является ContentPresenter (Name = '');Свойство target - 'Foreground' (тип 'Brush')

Всякий раз, когда привязка совершает что-то явно неправильное, ищите в панели вывода ошибки.Если вы не решите проблему прямо сейчас, добавьте трассировку, и вы получите кучу отладочной информации в области вывода:

<ContentPresenter 
    Width="100"
    Content="{Binding ID}"
    TextBlock.FontFamily="{Binding TextFont, PresentationTraceSources.TraceLevel=High}"
    TextBlock.Foreground="{Binding BindedTextColor}"
    />
...