19

Windows.Resources に次のスタイルを追加しました

<Window.Resources>
...
<!--A Style that extends the previous TextBlock Style-->
<!--This is a "named style" with an x:Key of TitleText-->
<Style BasedOn="{StaticResource {x:Type TextBlock}}"
   TargetType="TextBlock"
   x:Key="TitleText">
<Setter Property="FontSize" Value="26"/>
<Setter Property="Foreground">
 <Setter.Value>
  <LinearGradientBrush StartPoint="0.5,0" EndPoint="0.5,1">
    <LinearGradientBrush.GradientStops>
      <GradientStop Offset="0.0" Color="#90DDDD" />
      <GradientStop Offset="1.0" Color="#5BFFFF" />
    </LinearGradientBrush.GradientStops>
  </LinearGradientBrush>
  </Setter.Value>
</Setter>
</Style> 
...
</Window.Resources>

私の xaml コードにはこれらのスタイルがたくさんあり、各コンポーネント スタイルを追加のファイル (外部ファイルではなく) に保存したいと考えています。たとえば、TextBlocks に関連するすべてのスタイルは、TextBlockStyles.xaml

wpfでこれを行うにはどうすればよいですか?

プロジェクトでスタイルをリンクするにはどうすればよいですか?

前もって感謝します

4

5 に答える 5

28

マージされたリソース ディクショナリを使用している

app.xaml で使用します

<Application.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary 
                Source="/Your.Assembly.Name;component/TextBlockStyles.xaml"/>
            ... other dictionaries here
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Application.Resources>

または UserControl に直接

<UserControl.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary 
                Source="/Your.Assembly.Name;component/TextBlockStyles.xaml"/>
            ... other dictionaries here
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</UserControl.Resources>

ファイルが同じアセンブリ内にあり、プロジェクトのルートにある場合、またはリソース ディクショナリをフォルダーに配置したSource="..."場合に短縮できます。Source="TextBlockStyles.xaml"Source="Styles\TextBlockStyles.xaml"Styles

于 2012-06-11T10:16:26.343 に答える
1

動的なリソースを探しています。最善の方法は、リソースに辞書をロードしてマージすることです。アプリケーションまたはコントロールページのいずれか。これがその良いサンプルです。

http://blogs.msdn.com/b/wpfsdk/archive/2007/06/08/defining-and-using-shared-resources-in-a-custom-control-library.aspx

<ResourceDictionary>

  <ResourceDictionary.MergedDictionaries>

    <ResourceDictionary Source="Dictionary1.xaml"/>

  </ResourceDictionary.MergedDictionaries>

</ResourceDictionary>

this.Resources.MergedDictionaries.Add(Smyresourcedictionary);

于 2012-06-11T12:12:06.477 に答える