ContentControl не выравнивается с текстом в TextBlock

У меня есть гиперссылка с различными привязками, которые я поместил в DataTemplate, чтобы код не повторялся. Чтобы использовать это, я указываю ContentControl с ContentTemplate. Однако использование ContentControl, встроенного в текст TextBlock, приводит к смещению ссылки. Я перешел к следующему тестовому случаю, где это происходит:

<TextBlock>Text with a <ContentControl>Inline content control</ContentControl> in it.</TextBlock>

введите здесь описание изображения

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


person Will    schedule 05.01.2016    source источник
comment
Может ли RichTextBox только для чтения облегчить жизнь? Извините, у меня нет большого опыта создания встроенных элементов управления только в TextBlock.   -  person Chris W.    schedule 05.01.2016
comment
Вы можете попробовать поиграть с присоединенным свойством TextBlock.BaselineOffset к вашему ContentControl, но я думаю, что это не элегантное решение, если оно вообще решает проблему. Я думаю, вам следует подумать об определении общего Style для Hyperlink, а не оборачивать его в DataTemplate.   -  person Grx70    schedule 05.01.2016


Ответы (1)


Я не думаю, что возможно заставить ContentControl вести себя так же, как встроенный элемент, и единственный способ заставить ContentControl оставаться встроенным в текст - это изменить отступы/базовую линию и т. д., которые не могут реагировать на DPI меняется и, очевидно, является чем-то вроде взлома.

Я воспользовался предложением Grx70 и вместо этого переместил свои привязки в стиль, который затем установил на Hyperlink по мере необходимости:

<Style x:Key="CustomHyperlink" TargetType="{x:Type Hyperlink}" BasedOn="{StaticResource {x:Type Hyperlink}}">
        <Setter Property="NavigateUri" Value="{Binding TheUri}"/>
        <Setter Property="Command" Value="{Binding TheCommand}"/>
        <Setter Property="CommandParameter" Value="{Binding NavigateUri, RelativeSource={RelativeSource Self}}"/>
</Style>

<TextBlock TextWrapping="Wrap">
        ...please <Hyperlink Style="{StaticResource CaseHyperlink}">view in browser</Hyperlink> and...
</TextBlock>
person Will    schedule 14.03.2016