ContentControl 未与 TextBlock 中的文本对齐

Posted

技术标签:

【中文标题】ContentControl 未与 TextBlock 中的文本对齐【英文标题】:ContentControl not aligning with text within a TextBlock 【发布时间】:2016-01-05 14:50:53 【问题描述】:

我有一个带有各种绑定的超链接,我已将这些绑定放入 DataTemplate 以确保代码不会重复。为了使用它,我指定了一个带有 ContentTemplate 的 ContentControl。但是,使用带有 TextBlock 文本的内联 ContentControl 会导致链接偏移。我已经深入到以下发生这种情况的测试用例:

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

我发现解决此问题的唯一方法是在 ContentControl 上指定负边距,但显然这并不理想,因为它在字体大小更改时不起作用。

【问题讨论】:

ReadOnly RichTextBox 会让生活更轻松吗?抱歉,我在 TextBlock 中做内联控件的经验不多 您可以尝试在您的ContentControl 上使用TextBlock.BaselineOffset 附加属性,但我认为这不是一个优雅的解决方案,如果它完全解决了问题。我认为您应该考虑为Hyperlink 定义一个通用的Style,而不是将其包装在DataTemplate 中。 【参考方案1】:

我认为不可能让ContentControl 与内联元素具有相同的行为,而让ContentControl 与文本保持内联的唯一方法是修改填充/基线等。它无法响应 DPI 变化,显然有点 hack。

我使用了 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>

【讨论】:

以上是关于ContentControl 未与 TextBlock 中的文本对齐的主要内容,如果未能解决你的问题,请参考以下文章

ContentControl 不显示内容

Margin 和 Padding 是不是由 ContentControl 实现?

WPF - 将 ContentControl 添加到自定义画布

背水一战 Windows 10 (77) - 控件(控件基类): ContentControl, UserControl, Page

在 Avalonia 类库中的何处加载 ContentControl 样式?

带有 DataTemplate 的 ContentControl 不显示任何内容(WPF MVVM)