トップ回答者
トグルボタンの上にマウスを移動しても色が変わらない

質問
-
トグルボタンの上にマウスを持っていくと、水色になり、クリックすると濃い水色になりますがこの色を変えたくて以下のようにコーディングしました。
<Window.Resources> <Style x:Key="StyleToggleButton" TargetType="{x:Type ToggleButton}"> <Style.Triggers> <Trigger Property="IsMouseOver" Value="true"> <Setter Property="Background" Value="Red" /> </Trigger> <Trigger Property="IsChecked" Value="true"> <Setter Property="Background" Value="Blue" /> </Trigger> </Style.Triggers> </Style> </Window.Resources> <Grid> <StackPanel> <ToggleButton Style="{StaticResource StyleToggleButton}" Name="toggle1" >test</ToggleButton> </StackPanel> </Grid>
しかし、色は変わりませんでした。
なぜでしょうか?
ちなみにラベルの場合だと色は変わりました。
回答
すべての返信
-
Button 系の背景は、基本的に既定のテンプレート内の Decorator である ButtonChrome が描画しています。
// 特定のテーマにおける既定のスタイル/テンプレートは、VS2008 のヘルプだと目次ツリーの「.NET の開発 >.NET Framework SDK > .NET Framework 3.5 >サンプル > Windows Presentation Foundation のサンプル > 技術サンプル > WPF の基礎 > スタイルおよびテンプレート > テーマ」ページに紹介されています。
ButtonChrome は RenderPressed などの bool 型プロパティを持っており、このプロパティの変化に従って背景の描画を行います。既定のテンプレートでは、デコレート対象の Background プロパティは Background プロパティのみにバインドされており、マウスオーバー時や押下時の描画には無関係になっています(というか、RenderPressed などが変更された場合それらによる描画が優先され、Background は無視されるようになります)。
ということで、マウスオーバー時や押下時の色を変えたい場合、ToggleButton の Template 自体を差し替える必要がありそうです。