2009-03-26 4 views
7

私はそのようなようApp.xamlでウィンドウのスタイルを設定しています:私は基本的に(デフォルトの窓枠との境界線を削除するには)すべてのウィンドウをNoneに設定されたWindowStyleのプロパティ値を持つようにしたいWPFのウィンドウコントロールにスタイルを適用するにはどうすればよいですか?

<Application x:Class="MusicRepo_Importer.App" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:System="clr-namespace:System;assembly=mscorlib" StartupUri="TestMaster.xaml"> 
    <Application.Resources> 

     <Style TargetType="Window"> 
      <Setter Property="WindowStyle" Value="None"></Setter> 
     </Style> 

    </Application.Resources> 
</Application> 

れます。しかし、それは動作していません。

私はここで何が欠けていますか?

答えて

19

は私が..その後window.xamlで

<Style x:Key="MyWindowStyle" TargetType="Window"> 
    <Setter Property="WindowStyle" Value="None"></Setter> 
</Style> 

あなたがapp.xamlで

.. /リソースをスタイルに名前を付け、次のような各ウィンドウに適用するために持っていると信じています。..

<Window x:Class="MusicRepo_Importer.MyWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:sys="clr-namespace:System;assembly=mscorlib" 
    Title="MyStyledWindow" Style="{StaticResource MyWindowStyle}"> 

これは動作するはずですが、単にリソースにウィンドウのTargetTypeにしてスタイルを適用することは、他の要素のために働くように見えるものの、そのスタイルを使用するウィンドウを強制されません。

編集:あなたはTargetTypeのを指定した場合、ウィンドウの要素にデフォルトのスタイルを適用するに関連するいくつかの情報を見つけ
...

、そのタイプのすべての インスタンスが適用さ スタイルを持っています。しかし、派生型 はそう思わないでしょう。 <スタイル TargetType = "{x:タイプウィンドウ}"> 派生物/ウィンドウのすべてに対して が機能しません。 <スタイル TargetType = "{x:タイプローカル:MyWindow}"> は、MyWindowにのみ適用されます。したがって、 オプションは

と指定してください。 スタイルを適用するすべてのウィンドウのスタイルプロパティを指定してください。デザイナー はスタイル付きのウィンドウを表示します。

質問から:How to set default WPF Window Style in app.xaml?

質問に答えた人には適用されたスタイルを持っているベースウィンドウからの継承についての興味深いアイデアを持っていました。

+0

洞察のためにありがとう –

7

私はこの質問がかなり古いことを知っていますが、私はとにかく答えるでしょう。

ここは、C#4.0で私にとってうまく動作するコードです。 リソースディクショナリ内のすべてのサブクラスのスタイルを複製するだけです。

public partial class App : Application 
{ 
    protected override void OnStartup(StartupEventArgs e) 
    { 
     if (this.Resources.Contains(typeof(Window))) 
     { 
      var types = Assembly.GetEntryAssembly().GetTypes(); 
      var subTypes = types.Where(x => x.IsSubclassOf(typeof(Window))); 

      Style elementStyle = (Style)this.Resources[typeof(Window)]; 

      foreach (Type subType in subTypes) 
      { 
       if (!this.Resources.Contains(subType)) 
       { 
        this.Resources.Add(subType, elementStyle); 
       } 
      } 
     } 

     base.OnStartup(e); 
    } 
} 

これで、App.xamlのスタイルはすべてのウィンドウで機能するはずです。

P.S.ええ、私はこれが最もクリーンで最速の方法ではないことを知っていますが、それは機能します。 :)

関連する問題