2016-03-18 14 views
4

Visual Studio Image Libraryをダウンロードしました。付属のアイコンが.XAMLファイルの形式でベクター形式で使用できることがわかりました。次に例を示します。個別のXAMLをResourceDictionaryとしてインポートし、x:Keyを割り当てます

Add_16x.xamlは

<!-- This file was generated by the AiToXaml tool.--> 
<!-- Tool Version: 14.0.22307.0 --> 
<Viewbox Width="16" Height="16" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"> 
    <Rectangle Width="16" Height="16"> 
    <Rectangle.Fill> 
     <DrawingBrush> 
     <DrawingBrush.Drawing> 
      <DrawingGroup> 
      <DrawingGroup.Children> 
       <GeometryDrawing Brush="#00FFFFFF" Geometry="F1M16,16L0,16 0,0 16,0z" /> 
       <GeometryDrawing Brush="#FFF6F6F6" Geometry="F1M5.0004,-0.000199999999999534L5.0004,4.9998 0.000399999999999956,4.9998 0.000399999999999956,10.9998 5.0004,10.9998 5.0004,15.9998 10.9994,15.9998 10.9994,10.9998 16.0004,10.9998 16.0004,4.9998 10.9994,4.9998 10.9994,-0.000199999999999534z" /> 
       <GeometryDrawing Brush="#FF388A34" Geometry="F1M10,6L15,6 15,10 10,10 10,15 6,15 6,10 1,10 1,6 6,6 6,1 10,1z" /> 
      </DrawingGroup.Children> 
      </DrawingGroup> 
     </DrawingBrush.Drawing> 
     </DrawingBrush> 
    </Rectangle.Fill> 
    </Rectangle> 
</Viewbox> 

私は私のことができるようにし、「アイコン」と呼ばれるフォルダに自分のアプリケーションのソースで使用するすべてのアイコンのXAMLファイルを入れたいですファイルをと定義してMergedDictionariesと定義し、その内部にMergedDictionariesという名前のファイルがあります。アイコンのファイルを何らかの形でインクルードして、x:Keyのプロパティを割り当てて、アプリケーション全体で静的リソースとして参照できるようにします。

このicon.xamlファイルを.xamlファイル自体を変更せずに使用できますか?

私は、彼らがそうであるようにちょうどそれらを残すことができるようにしたいと思いますが、私は選択肢がないように、残念ながらそれはそう私IconDictionary.xamlにその内容をコピーするか、個々の.xamlファイルを編集してResourceDictionaryでそれらを囲むのいずれかに私がMergedDictionariesに追加できるx:Keyがあります。


ここでUPDATE

は、私は私のIconDictionary.xamlを明確にするためのようになりたいものです。これについて

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 

    <DataTemplate x:Key="Add_16x"> 
     <!-- Import Viewbox from Add_16x.xaml here... --> 
    </DataTemplate> 

</ResourceDictionary> 

答えて

2

このicon.xamlファイルを.xamlファイル自体を変更せずに使用できますか?

私はそう信じません。 XAMLはXMLとよく似ており、多くのXML規則に従いますが、XAMLコンパイラでは通常import XML from one file into anotherに使用されるDOCTYPEENTITYのマークアップが許可されていないようです。使用すると、最初のエラー報告は"このXML文書でDTDは禁止されています"と表示されます。 DTDを提供する機能がなければ、エンティティを宣言することはできず、スタンドアロンのXAMLをインポートすることはできません。


生成されたXAMLファイルを直接使用する場合は、プロジェクトにリソースとしてファイルを追加できます。リソースデータは、コードバックでXamlReader.Load()を使用してロードし、必要な場所に適切なタイミングで追加できます。あなたが名前のフォルダ、プロジェクト内の「リソース」にXAMLファイルをコピーし、そして「リソース」へのファイルの「ビルドアクション」、あなたはコードを書くことができます設定していると仮定すると例えば

、オブジェクト取得するには、次のように:

using (Stream stream = App.GetResourceStream(
    new Uri("pack://application:,,,/Resources/Add_16x.xaml")).Stream) 
{ 
    object o = XamlReader.Load(stream); 
} 

アプリケーションに埋め込まれたXAMLファイルのデータを表すStreamオブジェクトを取得して、WPFは、XAMLオブジェクトにロードしますXamlReader.Load()方法を使用して、表しています。個人的に


私はこれらのファイルを使用していたとき、私はちょうど/私自身のリソースXAMLファイルに、XAMLファイルからDrawingGroup要素をコピー&ペースト。ラッパー(ViewboxRectangle、およびDrawingBrush)は、とにかく冗長です。私が本当に必要とするのは、DrawingGroupオブジェクトです。

これを実行すると、明示的な<DrawingGroup.Drawing>の構文も削除され、DrawingGroupの子を直接インクルードするだけで、XAMLがより簡潔になります。例:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <DrawingGroup x:Key="Add_16x"> 
    <GeometryDrawing Brush="#00FFFFFF" Geometry="F1M16,16L0,16 0,0 16,0z" /> 
    <GeometryDrawing Brush="#FFF6F6F6" Geometry="F1M5.0004,-0.000199999999999534L5.0004,4.9998 0.000399999999999956,4.9998 0.000399999999999956,10.9998 5.0004,10.9998 5.0004,15.9998 10.9994,15.9998 10.9994,10.9998 16.0004,10.9998 16.0004,4.9998 10.9994,4.9998 10.9994,-0.000199999999999534z" /> 
    <GeometryDrawing Brush="#FF388A34" Geometry="F1M10,6L15,6 15,10 10,10 10,15 6,15 6,10 1,10 1,6 6,6 6,1 10,1z" /> 
    </DrawingGroup> 
</ResourceDictionary> 

あなたは好きなように上記のリソースを使用できます。たとえば、WPFでの慣用的なアプローチは、Drawingを表示し、コンテンツコントロールのコンテンツとしてDrawingリソースをバインドするように構成されたDataTemplateを宣言することです。例:次に、別の場所で

<DataTemplate DataType="{x:Type Drawing}"> 
    <Rectangle> 
    <Rectangle.Fill> 
     <DrawingBrush Drawing="{Binding}" Stretch="Uniform"/> 
    </Rectangle.Fill> 
    </Rectangle> 
</DataTemplate> 

<Button Content="{StaticResource Add_16x}"/> 

(例えば、コンテンツコントロールのスタイルを確認することは、あなたのButton、あなたのDrawingリソース、すなわち正しいサイズ、などとそうでない場合は互換性があります)

+0

私はこのソリューションが好きです。 'x:Key'を' DrawingGroup'に直接追加することはできますか?それを 'ResourceDictionary'に入れるには何かにラップする必要がありますか? –

+0

'x:Key'属性を' DrawingGroup'に追加できるだけでなく、 'DrawingGroup'オブジェクトを辞書に直接含める必要があるでしょう。より一般的には、オブジェクトにパラメータのないコンストラクタがあり、 'ResourceDictionary'のすべての要素に' x:Key'属性が必要であれば、 'ResourceDictionary'コレクションに_any_型のオブジェクトを宣言することができます。 –

+0

これは 'Path'オブジェクトのみで構成されるXAMLアイコンに対しても機能しますか? –

0

どのように?

app.xaml

<Application x:Class="WpfApplication35.App" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      xmlns:local="clr-namespace:WpfApplication35" 
      StartupUri="MainWindow.xaml"> 
    <Application.Resources> 
     <ControlTemplate x:Key="Add_16x"> 
      <!-- Import Viewbox from Add_16x.xaml here... --> 
     </ControlTemplate> 
    </Application.Resources> 
</Application> 

そして、このようにそれを使用します。

<ContentControl Template="{StaticResource Add_16x}" /> 

OR、

<Application x:Class="WpfApplication35.App" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      xmlns:local="clr-namespace:WpfApplication35" 
      StartupUri="MainWindow.xaml"> 
    <Application.Resources> 
     <ContentControl x:Key="Add_16x"> 
      <!-- Import Viewbox from Add_16x.xaml here... --> 
     </ContentControl> 
    </Application.Resources> 
</Application> 

そして、このようにそれを使用します。

<Button Content="{StaticResource Add_16x}" /> 
関連する問題