🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
C#

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

Visual Studio

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

XAML

XAML(Extensible Application Markup Language)はWPF、Silverlight、Windows PhoneそしてWindows Store appsでユーザーインターフェースを定義するために使われるXML言語です。

WPF

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

Q&A

解決済

1回答

6778閲覧

WPFでタッチ(クリック)のできる画像ボタンの作り方

tride

総合スコア68

C#

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

Visual Studio

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

XAML

XAML(Extensible Application Markup Language)はWPF、Silverlight、Windows PhoneそしてWindows Store appsでユーザーインターフェースを定義するために使われるXML言語です。

WPF

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

0グッド

0クリップ

投稿2019/09/11 06:45

編集2019/09/12 00:29

WPFにてタッチ(クリック含む)画像ボタンの作り方に苦戦しております。

内容としてはResouceDictionaryのButton.xamlのControlTemplate.Triggersでボタン背景を変えて実現しようかと思ったのですが、うまくできずに行き詰っております。
特に行き詰っているのは、画像ビルドアクションをResourceにした画像をXamlから指定する事と、タッチイベントをXaml上でどうすれば実現できるのかというところです。
いろいろ試した結果、下のところで止まっております。

画像について、全てのビルドアクションはResourceになっております。
出ているエラーは「パスC:ProguramFiles(x86)\<省略>\Common7\IDE\Resouces\Images\Image01.pngの一部は見つかりませんでした」になっています。

追記:
書き込んで直後にパス指定の仕方が分かったので、そこだけ訂正します。

追記:
現状、ボタンをタッチした際、ImageSource_2(image02.png)が長押しに関わらず一瞬で終わってしまいますので、この解決方法が知りたいです。

追記:
タップ長押しについてはMainWindows.xamlに以下を追記して対応できました。
現在無効時の仕方で詰まっております。
Stylus.IsPressAndHoldEnabled="False"

環境:
IDE:VisualStudio 2019
形式:WPF

ソリューション構成
WpfButtonTest03
┣ Resources
┃--┗Imnages
┃-----┣image00.png(無効時のボタン画像)
┃-----┣image01.png(通常時のボタン画像)
┃-----┣image02.png(タッチorクリック時のボタン画像)
┃-----┗image03.png(マウスオーバー時のボタン画像)
┗Style
┗---┗Button.xaml(ResourceDictionary)

xaml

1<!-- MainWindows.xaml --> 2<Window x:Class="WpfButtonTest03.MainWindow" 3 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 4 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 5 xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 6 xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 7 xmlns:local="clr-namespace:WpfButtonTest03" 8 Title="MainWindow" Height="450" Width="800" 9 Stylus.IsPressAndHoldEnabled="False"> 10 11 <Window.Resources> 12 <ResourceDictionary> 13 <ResourceDictionary.MergedDictionaries> 14 <ResourceDictionary Source="/Style/Button.xaml"/> 15 </ResourceDictionary.MergedDictionaries> 16 </ResourceDictionary> 17 </Window.Resources> 18 19 20 <Grid> 21 <Canvas x:Name="CanvasTop" HorizontalAlignment="Left" Height="419" VerticalAlignment="Top" Width="792"> 22 <Button x:Name="ButtonTest" HorizontalAlignment="Left" Margin="293,306,0,0" VerticalAlignment="Top" Width="400" Height="400" Template="{StaticResource ResourceKey=TemplateTestButton}" Cursor="Hand" Click="ButtonTest_Click" /> 23 </Canvas> 24 </Grid> 25 26</Window>

xaml

1<!-- Button.xaml --> 2<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 3 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 4 <BitmapImage x:Key="ImageSource_1" UriSource="pack://application:,,,/Resources/Images/Image01.png" /> 5 <BitmapImage x:Key="ImageSource_2" 6UriSource="pack://application:,,,/Resources/Images/Image02.png" /> 7 8 <ControlTemplate x:Key="TemplateTestButton" TargetType="{x:Type Button}"> 9 <Border x:Name="border" BorderThickness="0" BorderBrush="Transparent" CornerRadius="200"> 10 <Border.Background> 11 <ImageBrush ImageSource="{StaticResource ImageSource_1}"/> 12 </Border.Background> 13 <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/> 14 </Border> 15 <ControlTemplate.Triggers> 16 <Trigger Property="IsPressed" Value="True"> 17 <Setter TargetName="border" Property="Background" > 18 <Setter.Value> 19 <ImageBrush ImageSource="{StaticResource ImageSource_2}" /> 20 </Setter.Value> 21 </Setter> 22 </Trigger> 23 </ControlTemplate.Triggers> 24 </ControlTemplate> 25 26</ResourceDictionary> 27

C#

1//MainWindows.xaml.cs 2/* 省略 */ 3 public MainWindow() 4 { 5 InitializeComponent(); 6 7 ButtonTest.Template = (ControlTemplate)(Application.Current.FindResource("TemplateTestButton")); 8 } 9 10 private void ButtonTest_Click(object sender, RoutedEventArgs e) 11 { 12 13 } 14/* 省略 */

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

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

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

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

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

takabosoft

2019/09/11 08:03

いろいろ解決されているように見えますが、あとは何が出来ていないのでしょうか?
tride

2019/09/11 08:08

現状、ボタンをタッチした際、ImageSource_2(image02.png)が長押しに関わらず一瞬で終わってしまう事です
guest

回答1

0

ベストアンサー

長押しに関わらず一瞬で終わってしまう事です

通常タッチの長押しは右クリック判定に置き換わりますので、その右クリック判定自体を無効化してやればいいです。

WindowかButtonのタグの属性として
Stylus.IsPressAndHoldEnabled="False"
を入れてみてください。

参考:
https://docs.microsoft.com/ja-jp/dotnet/api/system.windows.input.stylus.ispressandholdenabled?view=netframework-4.8

投稿2019/09/11 08:14

takabosoft

総合スコア8356

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

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

tride

2019/09/12 00:25

回答ありがとうございます。 教えていただいた方法で実現できました。 もしよしよろしければ、上記ソースでいうimage00.png(無効時のボタン画像)はどのようにすればいいのかご存知ありませんでしょうか。 どこかをDisableかfalseにして無効にして指定の画像を表示したいのですが、Trigerでの実現の仕方がわかっていません。
takabosoft

2019/09/12 02:26

<Trigger Property="IsEnabled" Value="False"> <Setter TargetName="border" Property="Background" > <Setter.Value> <ImageBrush ImageSource="{StaticResource ImageSource_0}" /> </Setter.Value> </Setter> </Trigger> みたいな感じで行けると思いますが・・・
takabosoft

2019/09/12 02:27

<ControlTemplate.Triggers>の中にはトリガーをいくつも記述出来ます、ってところが判らなかった感じですかね?
tride

2019/09/12 02:45

IsEnabledというのがあったんですね。 IsPressedとIsMouseOverしかないものだと思っていました。 まだTriggerはイマイチ理解ができておらず、リファレンスでもそれらしい記述がなかったので、この2種類だけかと。 この辺り、他にあったりしますでしょうか。
takabosoft

2019/09/12 02:51

ボタンに限った話であれば、そのぐらいしか使わないでしょうね。 チェックボックスやラジオボタンになってくるとIsCheckedなんかも使います。 凝ったことをしようと思えば、自分で添付プロパティを作ってそのプロパティをトリガーにすることもできます。
tride

2019/09/12 03:18

ありがとうございます。 添付プロパティについては調べて勉強したいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問