A certain engineer "COMPLEX"

開発メモ その100 WPFのControlTemplate内のListBoxに対してStyleが適用されない

Introduction


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


<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の要素のプロパティに値を設定します。

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

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

コメントを残す

メールアドレスが公開されることはありません。

%d人のブロガーが「いいね」をつけました。