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/* 省略 */
回答1件
あなたの回答
tips
プレビュー