我正在嘗試爲內容控件(如Button或HeaderedContentControl等)創建一個模板,其中文本帶下劃線。當Content是字符串時,爲Silverlight中的ContentPresenter下劃線隱式文本塊?
我只想在指定Content="This text is underlined"
時加下劃線。
如果Content是另一個UIElement,它必須繼續正常工作。
提問這個問題的大多數帖子都滿意,修改模板只能用於字符串作爲內容。 Scott Gu有一篇關於styling buttons的好文章,但沒有解決這個問題。
如果您實際通過Content
作爲TextBlock
類型的實例但不作爲字符串傳遞,以下示例將起作用。視覺樹肯定有一個TextBlock,所以它應該設計它。也許這是Sivlerlight的限制。
當我希望它顯示爲紅色大文本時,此示例顯示黑色文本和紅色大文本。
<navigation:Page.Resources>
<Style TargetType="TextBlock" x:Key="style123">
<Setter Property="Foreground" Value="Red"/>
<Setter Property="FontSize" Value="72"/>
<Setter Property="FontWeight" Value="Bold"/>
<Setter Property="TextDecorations" Value="Underline"/>
</Style>
</navigation:Page.Resources>
<StackPanel>
<!-- This doesn't work and shows black text -->
<ContentPresenter Content="Small black text">
<ContentPresenter.Resources>
<Style TargetType="TextBlock" BasedOn="{StaticResource style123}"/>
</ContentPresenter.Resources>
</ContentPresenter>
<!-- This works and shows red text -->
<ContentPresenter>
<ContentPresenter.Content>
<TextBlock Text="This is big red text"/>
</ContentPresenter.Content>
<ContentPresenter.Resources>
<Style TargetType="TextBlock" BasedOn="{StaticResource style123}"/>
</ContentPresenter.Resources>
</ContentPresenter>
</StackPanel>
PS。我很好,如果解決方案是像ContentPresenter的子類和攔截事件或類似的東西瘋狂。嗯,我只是意識到也許這可能會工作... – 2010-08-11 23:53:21
瘋狂的解決方案很少需要在WPF - 看到我的答案;-) – 2010-08-12 15:49:05