更新:在網上找到更正規的解決方案
http://thewpfblog.com/?p=61
今天在群裡有人問到:
“怎樣設定 TextBlock.ToolTip 的width,使得過長的字串自動換行”
其實ToolTip是一個object,我們可以在其中放置任何東西,所以要解決這個問題,其實很簡單,只需要寫如下的xaml代碼:
<TextBlock>
<TextBlock.ToolTip>
<TextBlock Text="xxxxxx" TextWrapping="Wrap"/>
</TextBlock.ToolTip>
</TextBlock>
但問題不在這兒,很顯然,我們覺得每次寫ToolTip都要這麼寫太麻煩了,想放到Style中去,比如:
<Style TargetType="TextBlock">
<Setter Property="ToolTipService.ToolTip">
<Setter.Value>
<TextBlock
Text="// 通過綁定等方式從某地方擷取文本"
TextWrapping="Wrap"
Width="70" />
</Setter.Value>
</Setter>
</Style>
看上去這段代碼沒有任何問題,但編輯器卻報告了一個異常:
無法向“System.Object”類型的對象添加“System.Windows.Controls.TextBlock”類型的內容。
Faint!
無奈,只能換個路子走,最後的代碼如下:
<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Page.Resources>
<!-- Test -->
<TextBlock x:Key="ToolTipTemplate"
Text="Test Test Test Test Test Test Test Test Test Test Test Test"
TextWrapping="Wrap"
Width="70" />
<!-- 以下代碼會報出異常 -->
<!-- 無法向“System.Object”類型的對象添加“System.Windows.Controls.TextBlock”類型的內容。 -->
<!--
<Style TargetType="TextBlock">
<Setter Property="ToolTipService.ToolTip">
<Setter.Value>
<TextBlock
Text="Test Test Test Test Test Test Test Test Test Test Test Test"
TextWrapping="Wrap"
Width="70" />
</Setter.Value>
</Setter>
</Style>
-->
<Style TargetType="TextBlock">
<Setter Property="ToolTipService.ToolTip" Value="{StaticResource ToolTipTemplate}" />
</Style>
</Page.Resources>
<Grid>
<TextBlock Text="xxx" Width="70" Height="26"/>
</Grid>
</Page>
OK,大功告成。注意紅字部分,繞了個彎子。可以直接複製粘貼到XamlPad中查看。
但至於為什麼不能直接在Setter.Value中放置TextBlock還是一個未解之謎。