[解決済み] WPFで複数のスタイルを適用する方法
質問
WPFでは、どのように複数のスタイルを
FrameworkElement
? 例えば、すでにスタイルが設定されているコントロールがあるとします。 また、別のスタイルがあり、最初のスタイルを削除することなく、それに追加したいと思います。 これらのスタイルは異なるTargetTypesを持っているので、一方をもう一方に拡張することはできません。
どのように解決するのですか?
簡単な答えは、あなたがやろうとしていることは(少なくともこのバージョンのWPFでは)できない、ということだと思います。
つまり、特定の要素には1つのStyleしか適用できないのです。
しかし、上記の他の方がおっしゃっているように、もしかしたら
BasedOn
を使用するとよいでしょう。次の緩いxamlの部分をチェックしてみてください。この中で、2つのスタイルを適用したい要素の基底クラスに存在するプロパティを設定する基底スタイルがあることがわかります。そして、ベース・スタイルに基づく2つ目のスタイルでは、別のプロパティを設定しています。
つまり、ここで考えられるのは......複数のスタイルを設定したい要素の継承階層に応じて、設定したいプロパティを何らかの方法で分離すれば......回避できる可能性があるということです。
<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Page.Resources>
<Style x:Key="baseStyle" TargetType="FrameworkElement">
<Setter Property="HorizontalAlignment" Value="Left"/>
</Style>
<Style TargetType="Button" BasedOn="{StaticResource baseStyle}">
<Setter Property="Content" Value="Hello World"/>
</Style>
</Page.Resources>
<Grid>
<Button Width="200" Height="50"/>
</Grid>
</Page>
お役に立てれば幸いです。
注
特に注意すべきは、その一点です。を変更した場合
TargetType
を、2 番目のスタイル (上記の xaml の最初のセット) で
ButtonBase
の場合、2つのStyleは適用されません。しかし、その制約を回避するために、以下のxamlをチェックしてみてください。基本的には、Styleにキーを与え、そのキーで参照する必要があるということです。
<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Page.Resources>
<Style x:Key="baseStyle" TargetType="FrameworkElement">
<Setter Property="HorizontalAlignment" Value="Left"/>
</Style>
<Style x:Key="derivedStyle" TargetType="ButtonBase" BasedOn="{StaticResource baseStyle}">
<Setter Property="Content" Value="Hello World"/>
</Style>
</Page.Resources>
<Grid>
<Button Width="200" Height="50" Style="{StaticResource derivedStyle}"/>
</Grid>
</Page>
関連
-
[解決済み] データテーブルがすでに別のデータセットに属している
-
[解決済み] enumを列挙するには
-
[解決済み] 複数の例外を一度にキャッチする?
-
[解決済み] C#で文字列のエンコーディングを手動で指定せずに、一貫性のあるバイト表現を得るには?
-
[解決済み] DateTime型の誕生日から年齢を計算するにはどうしたらいいですか?
-
[解決済み] なぜList<T>を継承しないのですか?
-
[解決済み] TextViewの中に複数のスタイルを持たせることは可能ですか?
-
[解決済み】WPFでMVVMを使ったダイアログの扱いについて
-
[解決済み】WPFとイニシャルフォーカス
-
[解決済み】WPFで逆ブーリアンプロパティをバインドする方法は?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】プラットフォームが同じでも「不正なフォーマットでプログラムを読み込もうとしました。
-
[解決済み】XAMLにSystem.Stringを埋め込む
-
[解決済み] ServicePointManagerは、*スキームのプロキシをサポートしていません[closed]。
-
[解決済み] app.configのマッピングがないアセンブリのapp.configの再マッピングを考慮する。
-
[解決済み] WCF エラーの解決。このサービスのメタデータパブリッシングは現在無効になっています。
-
[解決済み] 到達不能なホストに対してソケット操作を行おうとした
-
[解決済み] ファイルまたはアセンブリをロードできませんでした 操作がサポートされていません。(HRESULT: 0x80131515 からの例外)
-
[解決済み] Powershell v3 Invoke-WebRequest HTTPSエラー
-
[解決済み] .NETでのdecimal, float, doubleの違い?
-
[解決済み] .NET Coreと.NET Standard Class Libraryのプロジェクトタイプの違いは何ですか?