Я пытаюсь создать шаблон для элемента управления содержимым, такого как Button или HeaderedContentControl и т. Д., Где текст подчеркнут.
Я просто хочу подчеркнуть текст, когда указан Content="This text is underlined"
.
Он должен продолжать работать в обычном режиме, если Content является другим элементом UIElement.
Большинство постов, задающих этот же вопрос, удовлетворены изменением шаблона для работы только для строки в качестве содержимого.У Скотта Гу есть хорошая статья о кнопках стиля , но он не решает эту проблему.
Следующий пример будет работать, если вы фактически передадите 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>