WPF Textblock工具提示不会换行

时间:2018-05-08 22:04:44

标签: wpf tooltip textblock textwrapping

我正在尝试创建一个自动换行的工具提示(并且还有一个采用普通内容的高级模式,但稍后会这样)。无论如何,我将内容设置为字符串,并使内容只是包装的文本块。但是我无法弄清楚为什么这不起作用。这是我正在研究的风格:

<Style x:Key="StHelpLinkBase" TargetType="{x:Type graphicElements:MyHelpLink}">
    <Setter Property="HorizontalContentAlignment" Value="Center" />
    <Setter Property="VerticalContentAlignment" Value="Center" />
    <Setter Property="Foreground" Value="White" />
    <Setter Property="Background" Value="{StaticResource BrHelpLinkBackground}" />
    <Setter Property="Width" Value="12" />
    <Setter Property="Height" Value="12" />
    <Setter Property="Margin" Value="5" />
    <Setter Property="IsTabStop" Value="False" />
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type graphicElements:MyHelpLink}">
                <Grid x:Name="templateRoot">
                    <Image Source="Images/Icon_16_Help.png" Stretch="UniformToFill" MaxHeight="16" MaxWidth="16"
                           HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                           VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
                           x:Name="PART_Image">
                        <Image.ToolTip>
                            <ToolTip Background="{TemplateBinding Background}" BorderThickness="0" 
                                     DataContext="{Binding DataContext, ElementName=PART_Image}"
                                     TextElement.Foreground="{TemplateBinding Foreground}"
                                     ContentTemplate="{StaticResource DtTooltipAdvanced}"
                                     MaxWidth="150"
                                     x:Name="PART_Tooltip">
                                <ContentPresenter />
                            </ToolTip>
                        </Image.ToolTip>
                    </Image>
                </Grid>                    
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

以下是引用的基本模板:

<DataTemplate x:Key="DtTooltipBasic">
    <Grid>
        <TextBlock Text="{Binding Content, RelativeSource={RelativeSource AncestorType=ToolTip}}" 
                   TextWrapping="Wrap" 
                   Foreground="White"
                   Margin="15"
                   FontFamily="Resources/#Artifakt Element"
                   FontSize="9pt" />
    </Grid>
</DataTemplate>

这是用法(MyHelpLink继承自ContentControl):

<graphicElements:MyHelpLink Content="This is some help text that is long and is just set as straight string in content but it should wrap I hope." />

我已经尝试在工具提示中设置MaxWidth,就像我现在一样,我已经尝试在DataTemplate中的网格上设置它,我已经尝试在文本块上设置它,所有这些都只是切断了文本。我也尝试直接设置文本块的Width属性,同样的事情......

那么为什么不包装?

1 个答案:

答案 0 :(得分:0)

好吧,我仍然不知道为什么这不起作用,但我最终得到了另一种解决方案。通过一些实验,我发现如果我将文本块直接放在控件模板而不是数据模板中,它就可以正常工作和包装。然而,为了切换它,我无法以这种方式使用它。

所以我做的是制作两个控制模板;一个包含用于通用内容的包装文本块,另一个包含用于非字符串内容的ContentPresenter。然后我在内容类型上使用触发器创建了样式(我在我的类中创建了一个自定义只读依赖项属性,表示如果内容是除字符串之外的任何内容则触发更改)。触发器将模板从包装文本块更改为内容呈现器,具体取决于内容集的类型。

如果有人知道为什么它不能在DataTemplate中工作,我很想知道并将标记为答案......