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

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

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

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

XAML

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

WPF

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

Q&A

解決済

1回答

9057閲覧

App.xamlにスタイルを設定すると意図せぬコントロールのスタイルまで変更されてしまう

退会済みユーザー

退会済みユーザー

総合スコア0

C#

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

XAML

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

WPF

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

0グッド

1クリップ

投稿2016/05/18 08:00

###前提・実現したいこと
App.xamlにスタイル設定がしたい

###発生している問題・エラーメッセージ
App.xamlにスタイルを設定すると意図せぬコントロールのスタイルまで変更されてしまう

###該当のソースコード
・App.xaml

C#

1<Application x:Class="Test.App" 2 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 3 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 4 StartupUri="MainWindow.xaml"> 5 <Application.Resources> 6 <Style TargetType="{x:Type Button}"> 7 <Setter Property="Foreground" Value="Blue"/> 8 </Style> 9 10 <Style TargetType="{x:Type TextBlock}"> 11 <Setter Property="FontSize" Value="50"/> 12 <Setter Property="Foreground" Value="Red"/> 13 </Style> 14 </Application.Resources> 15</Application>

・MainWindow.xaml

C#

1<Window x:Class="Test.MainWindow" 2 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 3 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 4 Title="MainWindow" Height="350" Width="525"> 5 <StackPanel> 6 <Button Content="サンプル" Width="100" Height="100" /> 7 <TextBlock Text="サンプル" Width="200" Height="100"/> 8 </StackPanel> 9</Window>

・MainWindow.cs

C#

1using System.Windows; 2 3namespace Test 4{ 5 /// <summary> 6 /// MainWindow.xaml の相互作用ロジック 7 /// </summary> 8 public partial class MainWindow : Window 9 { 10 public MainWindow() 11 { 12 InitializeComponent(); 13 } 14 } 15}

###試したこと
上記の場合にデザイナではボタンの色は「青」テキストブロックの色は「赤」になっています。
それが実行するとボタンの色が「赤」に変わります。またフォントサイズも50に変わります。

App.xamlのスタイルをMainWindow.xamlに持って行くと、このような現象は起こりません。

下記のように記述しても同現象です。

C#

1<Style TargetType="TextBlock"> 2 <Setter Property="FontSize" Value="50"/> 3 <Setter Property="Foreground" Value="Red"/> 4</Style>

そもそもApp.xamlにこのような記述のしかた自体、NGなのでしょうか?
よろしくお願いします。

###補足情報(言語/FW/ツール等のバージョンなど)
C#
VS2010 Pro

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

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

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

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

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

guest

回答1

0

ベストアンサー

ButtonやLabel等、テキスト描画のために内部的にTextBlockが自動生成される場合、
App.xaml内で定義されたStyleが優先されて適用されることが原因のようです。

習熟していないので恐縮ですが、
App.xamlにスタイルを定義したいとのことであれば、x:keyを併用するなどはいかがでしょうか。

下記サイトでは、TargetType="TextBlock"のみでもって
App.xaml内にStyleを定義することは推奨していないようでした。

下記サイトが参考になるかと思います。
【参考】
http://www.ikriv.com/dev/wpf/TextStyle/TextBlockStyle.shtml
http://www.ikriv.com/dev/wpf/TextStyle/
http://stackoverflow.com/questions/9035878/implicit-styles-in-application-resources-vs-window-resources

投稿2016/05/20 08:21

TAKA_0921

総合スコア234

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

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

退会済みユーザー

退会済みユーザー

2016/05/20 10:04

ありがとうございます!なるほどです! 開発時に「key」を付け忘れてしまうとスタイルが反映されないので「key」を設定せずにいました。有無を言わさず全コントロールの初期値として設定するのが目的でした。 納得できる回答をありがとうございました。助かりました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問