我正在尝试创建一个自动换行的工具提示(并且还有一个采用普通内容的高级模式,但稍后会这样)。无论如何,我将内容设置为字符串,并使内容只是包装的文本块。但是我无法弄清楚为什么这不起作用。这是我正在研究的风格:
<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属性,同样的事情......
那么为什么不包装?
答案 0 :(得分:0)
好吧,我仍然不知道为什么这不起作用,但我最终得到了另一种解决方案。通过一些实验,我发现如果我将文本块直接放在控件模板而不是数据模板中,它就可以正常工作和包装。然而,为了切换它,我无法以这种方式使用它。
所以我做的是制作两个控制模板;一个包含用于通用内容的包装文本块,另一个包含用于非字符串内容的ContentPresenter。然后我在内容类型上使用触发器创建了样式(我在我的类中创建了一个自定义只读依赖项属性,表示如果内容是除字符串之外的任何内容则触发更改)。触发器将模板从包装文本块更改为内容呈现器,具体取决于内容集的类型。
如果有人知道为什么它不能在DataTemplate中工作,我很想知道并将标记为答案......