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

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

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

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

XAML

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

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

WPF

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

Q&A

解決済

2回答

3758閲覧

【C#】【XAML】定義したスタイルを反映しつつ一部のプロパティを呼び出し側から設定したい

galmacher

総合スコア37

C#

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

XAML

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

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

WPF

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

0グッド

0クリップ

投稿2018/10/23 14:15

■やろうとしていること
オリジナルのボタンのデザインをリソースディクショナリに定義しようとしています。
そのボタンは四角い枠線があり、その中に画像ファイルとテキストを包含しています。
枠線の色とテキストを、MouseOverとクリック時に色を変えたいです。

現在作ったXAMLは以下です。sampleという名前でスタイルを定義し、ボタンに適用ています。

XAML

1<Window x:Class="ResourceDic.MainWindow" 2 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 3 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 4 xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 5 xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 6 xmlns:local="clr-namespace:ResourceDic" 7 mc:Ignorable="d" 8 Title="MainWindow" Height="450" Width="800"> 9 <Window.Resources> 10 <Style TargetType="Button" x:Key="sample"> 11 <Setter Property="Template"> 12 <Setter.Value> 13 <ControlTemplate TargetType="Button"> 14 <Border Name="border" BorderThickness="4" BorderBrush="Green"> 15 <StackPanel Orientation="Horizontal" Background="Transparent"> 16 <Image Name="image" Source="Resources/aaa.png" /> 17 <TextBlock Name="text" FontSize="72" VerticalAlignment="Center">あいうえお</TextBlock> 18 </StackPanel> 19 </Border> 20 <ControlTemplate.Triggers> 21 <Trigger Property="IsMouseOver" Value="true"> 22 <Setter TargetName="border" Property="BorderBrush" Value="blue" /> 23 <Setter TargetName="text" Property="Foreground" Value="blue" /> 24 </Trigger> 25 <Trigger Property="IsPressed" Value="true"> 26 <Setter TargetName="border" Property="BorderBrush" Value="red" /> 27 <Setter TargetName="text" Property="Foreground" Value="red" /> 28 </Trigger> 29 </ControlTemplate.Triggers> 30 </ControlTemplate> 31 </Setter.Value> 32 </Setter> 33 </Style> 34 </Window.Resources> 35 36 <Grid> 37 <Viewbox Height="100" Width="100" HorizontalAlignment="Center"> 38 <Button Style="{StaticResource sample}" /> 39 </Viewbox> 40 </Grid> 41 42</Window>

■困っていること
上記コードでは画像が「aaa.png」、テキストが「あいうえお」に固定になってしまいます。
リソースディクショナリの呼び出し側から、画像ファイルとテキストは指定できるようにしたいです。
どのようにすればできますでしょうか。

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

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

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

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

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

guest

回答2

0

添付プロパティで実現できます。

XAML Tricks – C#じゃできなくてXAMLだからできる事

投稿2018/10/24 06:31

gaya-K

総合スコア449

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

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

galmacher

2018/10/27 12:39

ご回答ありがとうございます。 添付プロパティ、DockPanelやGridの配置場所ぐらいでしか使ったことありませんでしたが、これを機会にもう少し勉強してみます。
guest

0

ベストアンサー

ここが参考になるのではないかと思います。

WPF で ボタン に 画像 を 使用する 方法

投稿2018/10/23 21:33

Zuishin

総合スコア28660

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

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

galmacher

2018/10/23 22:04

ご回答ありがとうございます。 そちらのサイトを参考にして上記XAMLを書きましたが、画像ファイルとテキストの内容を呼び出し側で指定する方法が分からず質問させていただいた次第です。
Zuishin

2018/10/23 22:23

<Button HorizontalAlignment="Center" VerticalAlignment="Center" Width="120" Height="40" Grid.Column="1"> <StackPanel Orientation="Horizontal" Margin="4,2"> <Image Source="{StaticResource ImageSource1}" VerticalAlignment="Center" /> <Label Content="ユーザー" VerticalAlignment="Center" Margin="10,0,0,0"/> </StackPanel> </Button>
Zuishin

2018/10/23 22:24

このようにボタンの中に入れてください。
Zuishin

2018/10/23 22:27

ボタンには画像とテキストを保持するプロパティがありませんから、それをどこかで保持しなければなりません。 データコンテクストに入れるのでは使い勝手が悪くなりますので、コンテンツに入れるのが最善ではないかと思います。
Zuishin

2018/10/23 22:27

またボタンのコンテンツには複数のタグを入れられないので、スタックパネル等でまとめる必要があります。
Zuishin

2018/10/23 22:33

スタックパネルを取り去りたいのであれば、ボタンを継承して画像とテキストを保持するプロパティを持つユーザーコントロールを作ればいいのではないでしょうか。
galmacher

2018/10/27 12:38

ご回答ありがとうございました。 Style側をどうにかすることばかりに気を取られていましたが、ButtonにStackPanelを子、ImageとLabelを孫にすればよいのですね…。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問