WPF TextBlockのデフォルトスタイルを設定すると、ラベルのスタイルが上書きされます。

TextBlockでデフォルトのスタイルを設定すると、Labelおよび他のコントロールのスタイルも設定されます。これは、スタイルをアプリケーションリソースに配置した場合にのみ発生します。ウィンドウリソースにスタイルを配置しても、問題ありません。

また、VS 2008 DesignerとXamlPadXには予想どおりにラベルが表示されることがわかりましたが、実際にアプリケーションを実行した場合にのみ問題が発生します。

<Application x:Class="WpfApplication.App"
   xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
   xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
   StartupUri="Window1.xaml">
   <Application.Resources>
       <ResourceDictionary>
           <Style TargetType="TextBlock">
               <Setter Property="FontSize" Value="8"/>
           </Style>

           <Style x:Key="Title" TargetType="Label">
               <Setter Property="FontSize" Value="32"/>
           </Style>
       </ResourceDictionary>
   </Application.Resources>
</Application>

<Window x:Class="WpfApplication.Window1"
       xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
       xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
       Height="300"
       Title="Window1"
       Width="300">
   <StackPanel>

       <TextBlock Text="TextBlock No Style" Style="{x:Null}"/>
       <Label Content="Label No Style" Style="{x:Null}"/>

       <TextBlock Text="Default TextBlock"/>
       <Label Content="Default Label" Style="{StaticResource Title}"/>

   </StackPanel>
</Window>

上記のコードは次のとおりです。

TextBlock No Style - Default font size (As you would expect)
Label No Style - Size 5 font size (How did this happen?)
Default TextBlock - Size 5 font size (As expected by my style)
Default Label - Size 5 font size (How did this happen?)
ベストアンサー
はい、それは予想されることです。 Labelのデフォルトのテンプレートを見てください。それは単にインデントされたTextBlockです。スタイルは継承されるので、LabelはFontSizeを32に設定しますが、TextBlockのスタイルはそれをオーバーライドします。あなたがたった今持っているならば、それは同様に5ptでしょう

編集:だから私はこれを解決する方法は、NormalTextと呼ばれるTextBlockのダミーサブクラス(すなわち何も変更されていないクラス)を作成し、それからそれをスタイルすることです。これにより、誤って他のTextBlockを拾うことがなくなります。

転載記事の出典を記入してください: WPF TextBlockのデフォルトスタイルを設定すると、ラベルのスタイルが上書きされます。 - コードログ