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

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

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

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

Visual Studio

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

WPF

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

Q&A

解決済

2回答

3033閲覧

カスタムコントロールにMaterialDesignを反映させるにはどうしたらよいでしょうか?

nekome4

総合スコア24

C#

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

Visual Studio

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

WPF

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

0グッド

0クリップ

投稿2018/09/11 18:11

編集2018/09/12 12:30

カスタム化したTextBoxExにXAMLから直接「Style="{StaticResource MaterialDesignTextBox}」と指定すると反映されますが、そうではなくデフォルトで反映させたいのですがどのようにしたらよいでしょうか?

#追記
言葉足らずで申し訳ありません。
MaterialDesignは「Material Design In XAML Toolkit」(Nugetでインストール)というライブラリを使用してコントロールのスタイルを変えたという意味で使いました。

導入後はButton、ListBox、TextBox等確かにデザインは反映されたのですが、カスタムコントロールだけが通常のスタイルのままです。
CSSでいうインラインスタイルでの指定ではなく、外部ファイル等でタグに直接スタイルを指定する・・・と言うような方法を探してします。

以上ご教示よろしくお願いいたします。

#追記2
Zuishinさんの示したコードでサンプルプロジェクトを作りやってみたところ適当に複数個配置したTextBoxにはスタイルが適用されましたが、サンプルプロジェクトではない今回のプロジェクトではMaterialDesignのスタイルは適用されませんでした。

App.xamlで上記でとった方法と同じような事をしていると思うのですが、配置したカスタムコントロール(TextBox)には適用されなかったです。
なんとなくZuishinさんの示したコードで全体に適用する原理はつかめたのですがなぜこれで適用されないのかが疑問です。

CustomControl1.cs

C#

1using System; 2using System.Collections.Generic; 3using System.Linq; 4using System.Text; 5using System.Threading.Tasks; 6using System.Windows; 7using System.Windows.Controls; 8using System.Windows.Data; 9using System.Windows.Documents; 10using System.Windows.Input; 11using System.Windows.Media; 12using System.Windows.Media.Imaging; 13using System.Windows.Navigation; 14using System.Windows.Shapes; 15 16namespace MyWpf.Controls 17{ 18 public class CustomControl1 : TextBox 19 { 20 static CustomControl1() 21 { 22 DefaultStyleKeyProperty.OverrideMetadata(typeof(CustomControl1), new FrameworkPropertyMetadata(typeof(CustomControl1))); 23 } 24 } 25}

Generic.xaml

XAML

1<ResourceDictionary 2 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 3 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 4 xmlns:local="clr-namespace:MyWpf.Controls"> 5 <Style TargetType="{x:Type local:CustomControl1}" BasedOn="{StaticResource {x:Type TextBox}}"> 6 7 </Style> 8</ResourceDictionary>

MainWindow.xaml

XAML

1<Window 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:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes" 7 xmlns:local="clr-namespace:MaterialWindow" 8 xmlns:Controls="clr-namespace:MyWpf.Controls" 9 x:Class="MaterialWindow.MainWindow" 10 TextElement.Foreground="{DynamicResource MaterialDesignBody}" 11 TextElement.FontWeight="Regular" 12 TextElement.FontSize="13" 13 TextOptions.TextFormattingMode="Ideal" 14 TextOptions.TextRenderingMode="Auto" 15 Background="{DynamicResource MaterialDesignPaper}" 16 FontFamily="{DynamicResource MaterialDesignFont}" 17 mc:Ignorable="d" 18 Title="MainWindow" Height="450" Width="800"> 19 20 <Grid> 21 <Controls:CustomControl1 HorizontalAlignment="Left" Height="23" TextWrapping="Wrap" Text="CustomControl1 " VerticalAlignment="Top" Width="120"/> 22 </Grid> 23</Window> 24

App.xaml

XAML

1<Application 2 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 3 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 4 xmlns:local="clr-namespace:MaterialWindow" 5 xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes" x:Class="MaterialWindow.App" 6 StartupUri="MainWindow.xaml"> 7 <Application.Resources> 8 <ResourceDictionary> 9 <ResourceDictionary.MergedDictionaries> 10 <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.Dark.xaml" /> 11 <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.Defaults.xaml" /> 12 <ResourceDictionary Source="pack://application:,,,/MaterialDesignColors;component/Themes/Recommended/Primary/MaterialDesignColor.DeepPurple.xaml" /> 13 <ResourceDictionary Source="pack://application:,,,/MaterialDesignColors;component/Themes/Recommended/Accent/MaterialDesignColor.Lime.xaml" /> 14 </ResourceDictionary.MergedDictionaries> 15 <!-- primary --> 16 <SolidColorBrush x:Key="PrimaryHueLightBrush" Color="#744CE0"/> 17 <SolidColorBrush x:Key="PrimaryHueLightForegroundBrush" Color="#FFFFFF"/> 18 <SolidColorBrush x:Key="PrimaryHueMidBrush" Color="#6134D9"/> 19 <SolidColorBrush x:Key="PrimaryHueMidForegroundBrush" Color="#FFFFFF"/> 20 <SolidColorBrush x:Key="PrimaryHueDarkBrush" Color="#4D1DCF"/> 21 <SolidColorBrush x:Key="PrimaryHueDarkForegroundBrush" Color="#FFFFFF"/> 22 <!-- accent --> 23 <SolidColorBrush x:Key="SecondaryAccentBrush" Color="#5C5B5E"/> 24 <SolidColorBrush x:Key="SecondaryAccentForegroundBrush" Color="#FFFFFF"/> 25 </ResourceDictionary> 26 </Application.Resources> 27</Application>

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

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

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

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

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

Zuishin

2018/09/11 22:06

MaterialDesign はどういう意味で使われていますか?
nekome4

2018/09/11 23:23

質問を編集しなおしましたのでよろしくお願いいたします。
guest

回答2

0

ベストアンサー

コードビハインドの DefaultStyleKey.OverrideMetaData の業をコメントアウトしてみてください。

基底クラスのデフォルトスタイルが適用されるはずです。

追記

カスタムコントロールのスタイルを App.xaml に移すとうまく行きました。
マテリアルデザインのスタイルを読み込む前に、デフォルトスタイルが作成されてるのかもしれません。

投稿2018/09/12 03:32

編集2018/09/13 10:03
gaya-K

総合スコア449

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

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

nekome4

2018/09/12 11:16

ご返信ありがとうございます。 コメントアウトしても同じでした。
gaya-K

2018/09/12 13:34

あれ、ダメでしたか。 すみません。アテがはずれました。
nekome4

2018/09/13 10:31

なるほど、それでマテリアルデザインのスタイルが適用されなかったのですね。 ありがとうございました。
gaya-K

2018/09/13 10:34

こちらも勉強になりました!
guest

0

チュートリアル: WPF コンテンツへのスタイルの適用

こちらのサンプルコードで SimpleButton にスタイルを適用しています。
これを参考にしてください。

###追記

外部ファイルでのスタイルの適用

まずソリューションエクスプローラーで Themes フォルダにリソースディクショナリを作成してください。
これを Dictionary1.xaml とします。
Dictionary1.xaml に次のように記載してください。

XAML

1<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 2 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 3 xmlns:local="clr-namespace:WpfApp1.Themes"> 4 <Style TargetType="TextBox"> 5 <Setter Property="Background" Value="AliceBlue"/> 6 </Style> 7 8</ResourceDictionary>

スタイルを適用する MainWindow.xaml に次のコードを追加してください。

XAML

1 <Window.Resources> 2 <ResourceDictionary Source="/Themes/Dictionary1.xaml"/> 3 </Window.Resources>

以上で MainWindow 上のすべての TextBox の背景に AliceBlue が適用されます。

投稿2018/09/12 00:03

編集2018/09/12 01:12
Zuishin

総合スコア28660

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

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

nekome4

2018/09/12 00:47

ご返信ありがとうございます。 ページの方拝見しました。 <Button Height="23" Margin="41,52,98,0" Name="button1" VerticalAlignment="Top" Style="{StaticResource SimpleButton}">Cancel</Button> このコードの事だと思うのですが、インラインスタイルではなく外部ファイルで一括(Buttonのスタイルを全て)で指定するような方法が知りたいです。 この方法だと、ButtonをXAMLで配置する度にスタイルを指定しなければいけません。 イメージとしては以下の記述で「SimpleButton」のスタイルが適用される感じです。 <Button Height="23" Margin="41,52,98,0" Name="button1" VerticalAlignment="Top">Cancel</Button>
Zuishin

2018/09/12 00:49

x:Key="SimpleButton" を外してください。 x:Key が指定されていなければすべてのターゲットコントロールに適用されます。
Zuishin

2018/09/12 01:12

外部ファイルによる設定を追記しました。
nekome4

2018/09/12 11:18

ご返信ありがとうございます。 質問(追記2)にまとめましたのでよろしくお願いいたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問