2009-03-26 26 views
1

私のWPFアプリケーションのVS2008ImageLibrary/Actions/pngformatからいくつかのアイコンを使用して、Visual Studioのルックアンドフィール(WinFormsの "Insert Standard Items"コマンドのような)を取得したいと考えています。
I資源として画像を追加し、私のXAMLファイルでそれらを参照されました:WPFで消えるアイコン

<DockPanel.Resources> 
     <Image x:Key="NewIcon" Source="Toolbar Images/NewDocumentHS.png" Height="16" Width="16"/> 
</DockPanel.Resources> 

そして私は、メニューに画像を追加したとツールバー

<MenuItem Command="ApplicationCommands.New" Icon="{StaticResource NewIcon}"/> 
<!-- ... --> 
<Button Command="ApplicationCommands.Save"><StaticResourceExtension ResourceKey="SaveIcon"/></Button> 

しかし、Iメニューを開くと、ボタンが決してそこになかったかのようにツールバーからアイコンが消えます。Vistaのアイコン/圧縮されたPNGのサポートが不足しているためにこの種の問題が発生していますが、わかりませんこれはまったく同じ問題です。フォーマットを変更することでこれを回避しようとする私の試みは失敗しました。あるいは、最適化されていない結果(例えば、透過性を失うなど)が与えられました。 誰かがこれを行うより良い方法を知っていますか?

編集:私はイメージが消えるかもしれないと心配すると思いますけれども、この問題を有する他の人々のために 、< DockPanel.Resourcesの異なるキーで重複したエントリを作成するには、>各参照用のタグは、機能的に十分な回避策のようです何らかの理由で再ロードする必要がある場合はもう一度。

答えて

3

私はあなたがボタンでの使用のための別のリソースを定義する必要が思う:

<DockPanel.Resources> 
     <Image x:Key="NewIconForMenu" Source="Toolbar Images/NewDocumentHS.png" Height="16" Width="16"/> 
<Image x:Key="NewIconForButton" Source="Toolbar Images/NewDocumentHS.png" Height="16" Width="16"/> 
</DockPanel.Resources> 

あなたはそれが基本的にImage型のオブジェクトを作成された画像リソースを宣言するときに私は、と仮定します。その後、IconItemとContentプロパティを設定することでMenuItemとButtonの子にします。したがって、これはもはやツリーではありません。これは合法ではありません。

NewIconも使用する2番目のボタンを宣言しようとすると、論理ツリーの例外が発生します。

MenuItemがその例外をどのようにエスケープしたのか分かりません。自分自身の論理子コレクションに画像を追加する前に、Buttonの子要素からImage要素を削除することができます。

さて、もっと簡単な解決策が見つかりました。 x:Shared = "false"を辞書の画像宣言に追加することができます。これにより、そのイメージの新しいインスタンスが作成され、WPFツリールールが破られることがなくなります。

+0

ああ、それはたくさんの意味があります。 x:Shared = "false"は、まさに私が探していたソリューションの種類です。どうもありがとうございました。 –

1

透明度を失う形式を使用して、透明キーをその背景色に設定します。

+1

透明性のないフォーマットを使用する際の問題は、画像のアンチエイリアスを失うことです。さらに、これは、背景がパレット内の他のどの色とも一致しないように、すべてのアイコンを変更する必要があります。それはうまくいくかもしれませんが、私は本当に洗練されたソリューションを望んでいます。 –

+0

ええ、このソリューションはあなたがブルートフォースアプリを作りたがっているのであれば良いですが、これはあなたが望むものではないので、これまで何の答えも得られていないので、私は賞金を払います。 – Kredns

関連する問題