13

別のファイルで定義されたスタイルに、スタイル内の BasedOn タグを指定する方法。

例、

Dictionary1.xaml の定義

   <Style x:Key="basicStyle" TargetType="TextBlock" >
       <Setter Property="FontSize" Value="24"></Setter>
       <Setter Property="Foreground" Value="DarkGray"></Setter>
       <Setter Property="FontWeight" Value="Bold"></Setter>
    </Style>

Dictionary2.xaml では、次のようなものが必要です

    <Style x:Key="headerStyle" TargetType="TextBlock" >
       <Setter Property="FontSize" Value="46"></Setter>
       <Setter Property="Foreground" Value="DarkGray"></Setter>
       <Setter Property="FontWeight" Value="Bold"></Setter>
    </Style>

これを達成する方法は?

4

1 に答える 1

17

簡単な方法:

MergedDictionariesDictionary2.xamlの定義 (開始タグの直後ResourceDictionary):

<ResourceDictionary.MergedDictionaries>
    <ResourceDictionary Source="/Path/to/Dictionary1.xaml" />
</ResourceDictionary.MergedDictionaries>

その後

<Style x:Key="headerStyle" TargetType="TextBlock" BasedOn="{StaticResource basicStyle}" >
    .....
</Style>

これで問題は解決しますが、すべての簡単な解決策と同様に、落とし穴があります。辞書をマージするたびに、マージされた辞書のコピーが効果的に作成されます。これは再帰的です。Dict3.xaml と Dict4.xaml の両方が Dictionary2.xaml を読み込む場合、Dictionary1.xaml の 3 つのインスタンスが作成されます。複雑な依存関係構造により、アプリケーションの起動時にメモリ内に 19,000 以上の辞書オブジェクトが存在し、メモリ フットプリントが 180MB から 1200MB (TrueStory™ :( ) になります) になることがあります。

解決策はSharedResourceDictionaryです。チュートリアルの実装は出発点と見なす必要があり、使用シナリオによっては、ある程度の調整が必要になる可能性があります。いくつかの落とし穴と解決策については、Google の「wpf SharedResourceDictionary」を参照してください。

于 2012-04-30T15:58:18.553 に答える