1

私はしばらく探していましたが、まだ解決策に近づいていません。これが私の状況です:

Excel アドインを作成しており、WPF を使用して外観を改善したいと考えています。本来 (私の知る限り) アドインは WinForm でなければなりません。WPF Element Hosting を使い始めましたが、結果はあまり良くありません。次に、WPF プロジェクトをソリューションに追加するとうまくいくことがわかりましたが、今はリソース ディクショナリを使用してフォームを同じように保ち、インライン スタイルを減らしたいと考えています。マージされた辞書を機能させることができません。

Pack URI と ;component/..... を試しましたが、どちらも機能しません。

私は何を間違っていますか?

- - - -編集 - - - -

SolutionA という Excel アドイン ソリューションがあります。このソリューションには 3 つのプロジェクトが含まれています。

ProjectA は、ProjectB と ProjectC への参照を持つ Excel アドイン プロジェクトです。

ProjectC への参照を持つ WPF プロジェクトである ProjectB

リソース ディクショナリを含む ProjectC

ProjectB からリソース ディクショナリを参照する方法を知る必要があります。

4

3 に答える 3

0

WPF コントロールと MahApps スタイルを使用して Excel ドキュメントのカスタマイズを開発しています。Excel 2013 と物理的な Excel 2010 ボックス (両方とも VS2012 が搭載されています) を使用して、仮想化された開発ボックスですべてが正常に動作します。

Excel 2010 または Excel 2013 を実行している他の仮想ボックスでは、スタイルが機能しません。これは、まったく同じコードを実行した場合です。

これは、ここおよびこの投稿で報告されている問題に似ています。

それがあなたに役立つ場合に備えて、私の発見を共有します。さまざまなテストから、MahApp リソースが UserControl または Window に配置されている場合、それらは機能するようです。ただし、それらを自分のリソース ディクショナリに配置し、そのディクショナリをユーザー コントロールにロードしても機能しません。

たとえば、これは機能します

<ResourceDictionary>
    <ResourceDictionary.MergedDictionaries>
        <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Colours.xaml" />
        <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Fonts.xaml" />
        <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Controls.xaml" />
        <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Accents/Blue.xaml" />
        <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Accents/BaseLight.xaml" />
    </ResourceDictionary.MergedDictionaries>
</ResourceDictionary>

しかし

<ResourceDictionary>
    <ResourceDictionary.MergedDictionaries>
        <ResourceDictionary Source="pack://application:,,,/IressWorkbook;component/Assets/MyTheme.xaml" />
    </ResourceDictionary.MergedDictionaries>
</ResourceDictionary>

MyTheme が含まれている場所ではありません

<ResourceDictionary 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">
<ResourceDictionary.MergedDictionaries>
    <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Colours.xaml" />
    <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Fonts.xaml" />
    <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Controls.xaml" />
    <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Accents/Blue.xaml" />
    <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Accents/BaseLight.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>

動作するマシンと動作しないマシンの違いを突き止めようとしています。

よろしくアラン

于 2013-09-17T22:05:56.770 に答える
0

MSDN の Windows Presentation Foundation ページのパック URI をご覧ください。

基本的に、次のようなものが必要です。

<ResourceDictionary Source=
"pack://application:,,,/AssemblyName;component/FolderName/DictionaryName.xaml" />

AssemblyNameリソース ファイルが含まれるアセンブリの名前に変更し、リソース ファイルが含まれるFolderNameフォルダーの名前に変更してから、リソース ファイルの名前に変更する必要がありDictionaryNameます。基本的には、リソース ファイルへの相対パスです。

于 2013-09-17T10:35:31.877 に答える