J'essaye de créer un modèle pour un contrôle de contenu tel que Button ou HeaderedContentControl etc. où le texte est souligné.Souligner le bloc de texte implicite créé dans Silverlight pour un ContentPresenter lorsque Content est une chaîne?
Je veux juste souligner le texte lorsque Content="This text is underlined"
est spécifié.
Il doit continuer à fonctionner normalement si Content est un autre UIElement.
La plupart des articles posant cette même question se contentent de modifier le modèle pour qu'il ne fonctionne que pour une chaîne en tant que contenu. Scott Gu a un bon article sur styling buttons mais ne résout pas ce problème.
L'exemple suivant fonctionnera si vous transmettez réellement Content
en tant qu'instance de type TextBlock
mais pas en tant que chaîne. Sûrement l'arbre visuel a un TextBlock donc il devrait le styler. Peut-être que c'est une limitation de Sivlerlight.
Cet exemple affiche du texte en noir et un gros texte rouge lorsque je souhaite qu'il s'affiche à la fois en tant que gros texte en rouge.
<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. Je vais bien si la solution est quelque chose de fou comme le sous-classement ContentPresenter et l'interception d'événements ou quelque chose comme ça. hmm je viens de réaliser peut-être que cela pourrait fonctionner ... –
Des solutions folles sont rarement nécessaires dans WPF - voir ma réponse ;-) –