1

なぜこれが起こるのか理解できません。WPFに簡単なアプリケーションがあります。このアプリケーションにはウィンドウがあり、App.xamlで1つのスタイルが定義されており、すべてのボタンのスタイルが変更されます。

<Application x:Class="PruebasDesk.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             StartupUri="Window1.xaml">
    <Application.Resources>
        <Style TargetType="{x:Type Button}">
            <Setter Property="Height" Value="23"></Setter>
            <Setter Property="Width" Value="75"></Setter>
            <Setter Property="Background" Value="DarkCyan"></Setter>
        </Style>
    </Application.Resources>
</Application>

これは正常に機能し、すべてのボタンがスタイルを取得します。さて、ここに問題があります。StartupUri属性を使用してアプリケーションを起動する代わりに、OnStartupメソッドを使用してアプリケーションを起動する場合:

public partial class App : Application
    {
        protected override void OnStartup(StartupEventArgs e)
        {
            Window1 win1 = new Window1();
            win1.Show();
        }
    }

アプリケーションのボタンは、App.xamlで定義されたボタンスタイルには適用されません。しかし...App.xamlに次のような別のスタイルを追加すると、次のようになります。

<Application x:Class="PruebasDesk.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             >
    <Application.Resources>
        <Style TargetType="{x:Type Button}">
            <Setter Property="Height" Value="23"></Setter>
            <Setter Property="Width" Value="75"></Setter>
            <Setter Property="Background" Value="DarkCyan"></Setter>
        </Style>
        <Style TargetType="{x:Type TextBox}">
            <Setter Property="Height" Value="23"></Setter>
            <Setter Property="Width" Value="180"></Setter>
            <Setter Property="Background" Value="Azure"></Setter>
        </Style>
    </Application.Resources>
</Application>

次に、ボタンにスタイルが適用されます!!! これは私には本当に奇妙に思えます。私が何かを逃しているかどうか誰かが知っていますか?

4

1 に答える 1

0

そのような動作が発生する理由を確実に説明することはできませんが、ベスト プラクティスを実践していれば、そのようなApp.xaml方法で使用することは避けられたはずです。app.xaml のリソース ディクショナリだけにマージすることをお勧めします。実際のスタイルを保存することは、管理しにくいプロジェクトを作成するための良い方法です。

新しい ResourceDictionary ファイルを作成し、それらのスタイルを追加します。辞書を追加するときは、辞書をマージします。

  <Application.Resources>
    <ResourceDictionary>
      <ResourceDictionary.MergedDictionaries>
        <ResourceDictionary Source="Common.xaml"/>
      </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
  </Application.Resources>

または、イベントStartup(app.xaml:)にフックし、Startup="App_Startup"オーバーライドしないこともできますOnStartup。これは、定義した App.xaml リソースのセットアップで機能します。おそらくタイミングの問題です。

于 2012-05-21T15:34:14.380 に答える