none
トグルボタンの上にマウスを移動しても色が変わらない RRS feed

  • 質問

  • トグルボタンの上にマウスを持っていくと、水色になり、クリックすると濃い水色になりますがこの色を変えたくて以下のようにコーディングしました。

    <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>
    
    

    しかし、色は変わりませんでした。

    なぜでしょうか?

    ちなみにラベルの場合だと色は変わりました。

    2010年7月12日 8:13

回答

すべての返信

  • 色が変わらないのって、

    <Trigger Property="IsChecked" Value="true">
        <Setter Property="Background" Value="Blue" />
    </Trigger>
    
    

    の場合でしょうか。

    WPF でもボタンが押下状態の場合、色が変わらないのは仕様だった気がします。

    #ソースをどこかで見たんだけど、すぐ出てこない(汗


    ひらぽん http://d.hatena.ne.jp/hilapon/
    2010年7月12日 9:08
    モデレータ
  • 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 自体を差し替える必要がありそうです。

    2010年7月12日 10:48
  • ボタン押し下げ時の背景色を変えるには、テンプレートを差し替える必要があります。

    http://msdn.microsoft.com/ja-jp/library/cc296245(VS.95).aspx

    上記のページにToggleButtonのテンプレートが載っているので、これをコピーして改変するのが簡単です。


    なかむら(http://d.hatena.ne.jp/griefworker)
    • 回答としてマーク yty0918 2010年7月13日 0:15
    2010年7月12日 11:57
  • ひらぽんさん、Hongliangさん、なかむらさん回答ありがとうございます。

    中村さんの回答にあるコードを参考に試してみたいと思います。

    2010年7月13日 0:15