2012-10-30 22 views
6

私は背景イメージを持つwppfボタンを持っています。ボタンのマウスオーバーを無効にする

背景にマウスを置くと空になり、ボタンが表示されます。

マウスエフェクトを無効にするにはどうすればよいですか?

<Button BorderBrush="{x:Null}" Content="Reset" BorderThickness="0"Foreground="White" Focusable="False"> 
         <Button.Background> 
          <ImageBrush ImageSource="button.png" /> 
         </Button.Background> 
+0

あなたはVisual State Managerを使用するトリガーがあります。関連するすべてのxamlを入力してください。 – Aphelion

+0

これを試してください。 http://stackoverflow.com/questions/1302756/why-is-the-buttons-background-changing pro-tip、コメントする評判がない場合は、「トライアル回答」を投稿して何が起こるかを確認してください。 –

答えて

13

ボタンの視覚的なマウスオーバーの効果を無効にする方法は次のとおりです。私はトリガーやもので遊ぶ方法を感じ取るために、自分の設定の一部を残しました。自由に実験してください!

<Style TargetType="Button" x:Key="ImageButton" BasedOn="{StaticResource {x:Static ToolBar.ButtonStyleKey}}"> 
    <Setter Property="FocusVisualStyle" Value="{x:Null}" /> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="Button"> 
       <Border Name="border" 
         BorderThickness="{TemplateBinding BorderThickness}" 
         Padding="{TemplateBinding Padding}" 
         BorderBrush="{TemplateBinding BorderBrush}" 
         CornerRadius="5" 
         Background="{TemplateBinding Background}"> 
        <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" /> 
       </Border> 
       <ControlTemplate.Triggers> 
        <Trigger Property="IsMouseOver" Value="True"> 
         <Setter Property="BorderBrush" Value="Gainsboro" /> 
        </Trigger> 
        <Trigger Property="IsEnabled" Value="false"> 
         <Setter Property="Opacity" Value="0.25" /> 
         <Setter Property="BorderBrush" Value="Transparent" /> 
        </Trigger> 
       </ControlTemplate.Triggers> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

EDIT:FocusVisualStyleは(最初の2行)nullに設定+ "BASEDON" を使用すると効果の上にマウスを取り除きます。それ以外はすべて単なる例です。私はトリガーでそれをプレイするためにボーダーを追加しました(私はカスタムマウスオーバー効果が必要なので)。

+2

私はこの投稿に同意しません。私のアプリケーションでは、最初の2行はゼロの効果がありました。私は、あなたが部分的にテンプレートを上書きすることが許されていないこと、そしてそれを動作させるために完全で完全なテンプレートを作らなければならないことを他のところで読んだことがあります。残念ながら、まだ実用的な解決策は見つかっていませんが、この記事のアドバイスは間違いなく私にとってはうまくいきませんでした。 – shawn1874

+1

@ shawn1874 - 「私は他の場所で読んだことがある」は、このアプローチの潜在的な問題を説明するために1つまたは2つのメリットを得ることができます。 "あなたのアプリケーション"によって変更されていない空のプロジェクトで、まだ最初の2行だけではなく、完全なサンプルを試してみましたか? 7kの表示、12のアップフォォート、そして1つのダウンボォートではなく、私はこの答えが最も満足しているという印象を受けています。 – Joe

8

ButtonControlTemplateでは、Backgroundプロパティがトリガによって上書きされます。
あなたは全体ControlTemplateをやり直すと背景の変更を残すか、単にすべてのこれらの合併症を避けるためにそのようなあなたのButtonの内容として画像を追加することができ、次のいずれか

<Button.Content> 
    <Image Source="button.png" /> 
</Button.Content> 

それとも、そこにテキストが必要な場合は、同様に:

<Button.Content> 
    <Grid> 
     <Image Source="button.png" /> 
     <TextBlock Text="Reset" VerticalAlignment="Center" HorizontalAlignment="Center" /> 
    <Grid> 
</Button.Content> 
+0

私はContent = "Reset"があるので、使用できません。 –

+0

パネルで画像とテキストブロックを組み合わせて "リセット"することで複雑なレイアウトを行うことができます – MrDosu

+1

非常に簡単な解決法をお寄せいただきありがとうございます –