Introduction

Themes\Generic.xaml 内に定義した ControlTemplate についてのお話。
ControlTemplte 内のGridでRrsourcesセクションを用意し、下記のようなコードを書いた。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<Style TargetType="{x:Type controls:TestControl}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type controls:TestControl}">
<Grid x:Name="_Grid"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch">
<Grid.Resources>
<Style BasedOn="{StaticResource {x:Type ListBox}}" TargetType="ListBox">
<Setter Property="FontSize" Value="24" />
</Style>
</Grid.Resources>
<ListBox x:Name="ListBox1" Grid.Column="0" />
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>

期待しているのは、ListBoxのStyleを継承した、新しいStyleを継承すること。上のコードは省略してあって、本当はListBoxがもう少しあります。
ところが、上のコントロールを配置、実行するとStyleの継承がうまくいきませんでした。OSSのライブラリのクールなスタイルを継承したはずが、Windowsのもっさいスタイルが適用されていました…. しかも、Windows7だとうまくいくのに、Windows10だとうまくいかない、という不思議な挙動。

何故?

Answer

Windows7と10で挙動が異なる原因は不明でしたが、本現象は、ListBoxに対してStyleを使うのをやめると治ります。
つまり、直接ListBoxの要素のプロパティに値を設定します。

かなり納得がいかない修正でしたが、関係しそうな話題は見つかりました。

とりあえず解決したので良しとします。会社で無駄に悩みました。