1

4 つのモジュールを含む Prism 4.0 アプリでボタン スタイルを機能させることができません。Module2 の xaml ビュー ファイルのボタン要素を次に示します。

<Button Name="add" Width ="60" Style="{DynamicResource Red}"  Click="add_Click"> Add</Button>

アプリはビルドして実行しますが、ボタンの色が表示されません。シェル モジュールの Themes フォルダーにある Generic.xaml ファイルでスタイルを定義しました。これは、モジュール間で共有されるスタイルを配置できる場所であると想定されています。Generic.xaml ファイルには次のものがあります。

<ResourceDictionary
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:Shell.Controls" 
    xmlns:wc="clr-namespace:System.Windows.Controls;assembly=PresentationFramework">

 <Style 
   x:Key="{ComponentResourceKey 
    TypeInTargetAssembly={x:Type wc:Button},
    ResourceId=Red}"
    TargetType="wc:Button">
    <Setter Property="Foreground" Value="Red" />
  </Style>
</ResourceDictionary>

Shell プロジェクトの Properties フォルダーにある AssemblyInfo.cs ファイルにも、必要な参照があります。これにより、Prism アプリは Prism Generic.xaml ファイルからのすべてのスタイル参照を解決するようになります。

[assembly: ThemeInfo(ResourceDictionaryLocation.None, ResourceDictionaryLocation.SourceAssembly)]

これらは、David Hill のブログ[http://blogs.msdn.com/b/dphill/archive/2011/01/16/prism- 4-0-template-pack-now-available.aspx] . テンプレートには既に Generic.xaml にいくつかのスタイルが含まれていましたが、ベア テンプレート アプリはシェル アセンブリのコントロールにこれらのスタイルのみを使用したため、上記のパラメーター "None" と "SourceAssembly" が使用されました。

Shell モジュール以外のモジュールで使用するスタイルを定義しようとしているので、Module1 と Module2L の AssemblyInfo.cs に次の ThemeInfo 属性を追加しました。

[`assembly: ThemeInfo(ResourceDictionaryLocation.ExternalAssembly, ResourceDictionaryLocation.ExternalAssembly)]`

App.xaml でこのように App.xaml に ThemeDictionary 拡張機能を追加しようとしましたが、結果はありません。

    <Application.Resources>
    <ResourceDictionary>
    <ResourceDictionary.MergedDictionaries>
    <ResourceDictionary Source="{ThemeDictionary MyApp}"/>
    </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
    </Application.Resources>

また、App.xaml でこのようなパックの URL を試してみましたが、「リソースが見つかりません」というエラーが発生しました。

    <Application.Resources>
    <ResourceDictionary>
    <ResourceDictionary.MergedDictionaries>
    <ResourceDictionary Source="pack://application:,,,/MyApp;Shell/Themes/Generic.xaml"/>
    </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
    </Application.Resources>

何が欠けているかについての考えやアイデアはありますか? ありがとうございました。

4

1 に答える 1

0

更新: Microsoft の Marc Rodman からテクニカル サポートを通じて回答を得ました。2 つの変更:

1 つは Generic.xaml にあり、スタイル定義を次のように変更しました。

    <Style
x:Key="Red"
TargetType="Button">
    <Setter Property="Foreground" Value="Red" />
    </Style>

もう 1 つの変更は App.xaml でした。

  <Application.Resources>

    <ResourceDictionary
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <ResourceDictionary.MergedDictionaries>
     <ResourceDictionary
Source="pack://application:,,,/Shell;component/Themes/Generic.xaml"/>
     </ResourceDictionary.MergedDictionaries>
     </ResourceDictionary>
    </Application.Resources>
于 2012-05-16T19:03:24.457 に答える