質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

Q&A

解決済

1回答

12751閲覧

WPF 画像付きボタンを押した時に画像を暗くする方法を教えてください

pectin

総合スコア95

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

0グッド

0クリップ

投稿2017/04/17 12:14

編集2017/04/18 01:39

###画像付きボタンを押した時に画像を暗くする方法を教えてください
ボタンを押した時にあらかじめ暗くした画像を用意して差し替える方法がありますが、できれば画像を差し替えずに画像を少しだけ暗くする方法があれば、暗くする方法を使いたいと考えています。

イメージとしては、黒(#000000)の透過度50%を画像の上に被せたようなエフェクトができればと思っています。

もしご存知の方がいらっしゃいましたら、教えていただけると助かります。

よろしくお願いします。


現在ボタンに画像を設定して、とりあえず押したら(IsMouseOverも)透明度を変えています

<Button x:Name="Button_Next" Content="" Margin="128,768,0,0" Width="1792" Height="464" Click="Button_Next_Click" BorderBrush="{x:Null}" Foreground="{x:Null}" HorizontalAlignment="Left" VerticalAlignment="Top" Padding="1" HorizontalContentAlignment="Center" VerticalContentAlignment="Center"> <Button.Style> <Style TargetType="Button"> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="Button"> <Border Name="border" BorderThickness="1" BorderBrush="#00000000"> <StackPanel Name="panel" Orientation="Horizontal" Background="#00000000"> <Image Name="image" Source="{StaticResource Image_Button_ON}" /> </StackPanel> </Border> <ControlTemplate.Triggers> <Trigger Property="IsMouseOver" Value="true"> <Setter TargetName="border" Property="BorderBrush" Value="#00000000" /> <!-- <Setter TargetName="image" Property="Source" Value="{StaticResource Image_Button_ON}" /> --> <Setter TargetName="image" Property="Opacity" Value="0.8" /> <Setter TargetName="panel" Property="Background" Value="#00000000" /> </Trigger> <Trigger Property="IsPressed" Value="true"> <Setter TargetName="border" Property="BorderBrush" Value="#00000000" /> <Setter TargetName="image" Property="Opacity" Value="0.8" /> <Setter TargetName="panel" Property="Background" Value="#00000000" /> </Trigger> </ControlTemplate.Triggers> </ControlTemplate> </Setter.Value> </Setter> </Style> </Button.Style> </Button>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Tak1wa

2017/04/17 15:29

Buttonには画像が設定されてるんですか?
guest

回答1

0

ベストアンサー

こんな感じでしょうか?

<Window x:Class="WpfApplication2.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:WpfApplication2" mc:Ignorable="d" Title="MainWindow" Height="350" Width="525"> <Window.Resources> <!-- ボタンに表示する画像 --> <BitmapImage x:Key="Image_Button_ON" UriSource="./Resources/user.png" /> <!-- ボタンのクリックをトリガーとしてグレーアウト用のボーダーの色を変更する --> <Style x:Key="ClickButton" TargetType="Border"> <Style.Triggers> <DataTrigger Binding="{Binding RelativeSource={RelativeSource AncestorType=Button}, Path=IsPressed}" Value="True" > <Setter Property="Background" Value="Black" /> <Setter Property="Opacity" Value="0.5" /> </DataTrigger> </Style.Triggers> </Style> </Window.Resources> <Grid> <Button> <Button.Style> <Style TargetType="Button"> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type Button}"> <!-- ボタンのデフォルトテンプレートの背景、ボーダーにする --> <Border Background="{TemplateBinding Background}" BorderThickness="{TemplateBinding BorderThickness}" BorderBrush="{TemplateBinding BorderBrush}"> <!-- ボタンの子要素のコンテナ --> <!-- HorizontalAlignmentとVerticalAlignmentをCenterにすることで画像とグレーアウトのサイズを統一し間延びするのを防ぐ --> <Grid HorizontalAlignment="Center" VerticalAlignment="Center"> <!-- 画像 --> <Image Source="{StaticResource Image_Button_ON}" /> <!-- グレーアウト用 --> <Border Style="{StaticResource ClickButton}" > <!-- OpacityMaskで画像領域のみ色を変更する --> <Border.OpacityMask> <ImageBrush ImageSource="{StaticResource Image_Button_ON}" /> </Border.OpacityMask> </Border> </Grid> </Border> </ControlTemplate> </Setter.Value> </Setter> </Style> </Button.Style> </Button> </Grid> </Window>

 

ボタンから青くなる処理を削除する参考

http://stackoverflow.com/questions/17259280/how-do-you-change-background-for-a-button-mouseover-in-wpf


ここから下は以前の回答となります

<Window x:Class="WpfApplication2.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:WpfApplication2" mc:Ignorable="d" Title="MainWindow" Height="350" Width="525"> <Window.Resources> <!-- ボタンに表示する画像 --> <BitmapImage x:Key="ImageSource1" UriSource="./Resources/user.png" /> <!-- ボタンのクリックをトリガーとしてグレーアウト用のボーダーの色を変更する --> <Style x:Key="ClickButton" TargetType="Border"> <Style.Triggers> <DataTrigger Binding="{Binding RelativeSource={RelativeSource AncestorType=Button}, Path=IsPressed}" Value="True" > <Setter Property="Background" Value="Black" /> <Setter Property="Opacity" Value="0.5" /> </DataTrigger> </Style.Triggers> </Style> </Window.Resources> <Grid> <Button> <Grid> <!-- 画像 --> <Image Source="{StaticResource ImageSource1}" /> <!-- グレーアウト用 --> <Border Style="{StaticResource ClickButton}" > <!-- OpacityMaskで画像領域のみ色を変更する --> <Border.OpacityMask> <ImageBrush ImageSource="{StaticResource ImageSource1}" /> </Border.OpacityMask> </Border> </Grid> </Button> </Grid> </Window>

投稿2017/04/17 17:20

編集2017/04/18 04:38
doubutweet

総合スコア141

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pectin

2017/04/18 03:09

こちらの情報ありがとうございました。 試したところグレーアウトするようになりました。 理解不足で申し訳ありませんが、よろしければ以下についても教えていただけると助かります。 ・画像が一回り小さいサイズで表示されてしまうの解消する方法(Border, Padding を 0 にしても解消できませんでした) ・マウスオーバー、または、ボタン押下時に水色の背景が表示されてしまうのを解消する方法(Backgroud のブラシを指定なしにしても解消できませんでした) ・参考になるサイトがあれば教えてください
doubutweet

2017/04/18 04:50

↑の回答を修正しました(一番下のコードは以前のものなので注意) ・一応マウスオーバー、クリックで青くなる処理を削除する様にしてみました ・一回り小さい画像が表示されるという現象がこちらでは確認できていない為、一応原因かなと思われる画像とグレーアウトのサイズを統一するように修正してみました ですがご要望どおりの実装となっているかは不明です まだ異なる点があるならば詳細に教えていただければと思います!
pectin

2017/04/18 13:09

修正ありがとうございました! こちらで試してみたところ、多少の修正で目的通りのことができました。 私の質問にもテンプレートを書きましたが、見比べると随分難しいことをしていたようでした。 まだまだ勉強不足ですが頑張りたいと思います。 ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問