2018/03/19(Mon) 14:39:55 編集(投稿者)
レスがつかないようなので。
一つ思いつくのは、以下のような形式です。
<ControlTemplate TargetType="Button" x:Key="Template_IconButton">
<ControlTemplate.Resources>
<Style TargetType="Run" x:Key="Style_FirstLetter">
<Setter Property="FontSize" Value="24"/>
</Style>
<DataTemplate TargetType="{x:Type si:String}">
<TextBlock>
<Run Style="{StaticResource Style_FirstLetter}"
Text="{Binding Mode=OneWay, Converter={StaticResource FirstLetterConverter}}"/><Run
Text="{Binding Mode=OneWay, Converter={StaticResource RestLettersConverter}}"/>
</TextBlock>
</DataTemplate>
</ControlTemplate.Resources>
<ContentPresenter/>
</ControlTemplate>
Button要素のContentに直接Stringが定義されている場合のみ、
ContentPresenterはDataTemplateを適用し、それ以外はContentを通常通りに描画します
(Button要素自身の描画はなされませんが)。
このStyleおよびDataTemplateをContentTemplateの外に出し、DataTemplateに適切なx:Keyを与えれば、
任意の「Contentに直接文字列を持つContentControl」に表示される文字列に
Style_FirstLetterが適用されるようにもできます。