2016-09-16 5 views
0

svgファイル(.svg-> Inkscape-> pdf-> ai-> ExpressionDesign-> xaml)からxamlを取得する方法を知りました。 。WPF/XamlのパックURL経由でベクトル画像を使用するきれいな方法はありますか

変換すると、DrawingBrushを持つリソースディクショナリまたはキャンバスを持つXamlファイルが得られます。

私はViewModelからきれいな方法でそれを使用できるように、パックURL経由でベクトル画像を使用するクリーンな方法を探しています。これは、(リソース).pngファイルへのパックURLを含むImagePath(文字列)でうまく動作するxamlフラグメントです。ベクトル画像には何か類似点はありますか?

// View Model: 
MainMenuEntry.ImagePath = "pack://application:,,,/MyBeautifulApp.Wpf.MainGui;component/CommonResources/OpenFile16x16.png" 

// .Xaml File 
<DataTemplate> 
    <Button Command ="{Binding ClickCommand}" Margin="3,0,0,0"> 
     <Button.Template> 
      <ControlTemplate> 
       <Image Source="{Binding ImagePath}" Width="16" Height="16" Stretch="Uniform" VerticalAlignment="Center" /> 
      </ControlTemplate> 
     </Button.Template> 
    </Button> 
</DataTemplate> 

私はそれがすべてで仕事を見つけた唯一の方法は、(のResourceDictionary内)DrawingBrushとStaticResourceにImageSourceはの結合していましたが、どこ私は可能性があることは、ビューモデルで私を助けていません。ビットマップファイルまたはベクトル画像のいずれかを持ちます。 htmlのsvgのようなベクトル画像を扱うには、何の意味もありません。

+0

「クリーン」という言葉が何であるかわかりません。私がやる方法はAI - > [XAML変換](http://www.mikeswanson.com/xamlexport/) - >リソースです。それが単一のパスならば、私はそれをスタイルテンプレートにします。複数の場合は、[別のテンプレート](http://stackoverflow.com/questions/13292179/best-way-to-use-a-vector-image-in-wpf/13293017#13293017)メソッドを使用します。次に、すべてがリソース辞書に格納され、XAMLかコードビハインドかにかかわらず、StaticResource経由で呼び出され、魅力的に機能します。 –

+0

クリーンなiは、pngのようにバインドできるpseudo code "pack:// application:,,,/MyBeautifulApp.Wpf.MainGui; component/CommonResources/OpenFileVectorGraphic.xaml"のような単純な意味です。今度は、ビットマップ/ベクターアイコンの複数のプロパティ、またはプロパティによって返されるタイプに応じて適切なアイテムを動的に作成するスタイル/テンプレートを持つviewmodelのMenuItemCommandクラスを作成します(packpath string/xamlグラフ)。 –

+0

ああ、本当にImage.Sourceを使用したい場合は、XAML VectorをDrawingImageリソースに移植して、 ' ' –

答えて

-1

組織的な目的のために、あなたの資産のための別のクラスライブラリプロジェクトを作成してください。私-asset.xaml/ResourceDictionaryの

資産/カテゴリーであなたのXAMLのベクタ形式を定義します。

資産/資産:

<ResourceDictionary 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    mc:Ignorable="d"> 
<VisualBrush x:Key="my-asset" Stretch="Uniform"> 
    <VisualBrush.Visual> 
     <Canvas Width="48.822" Height="53.243"> 
       <Path {...} /> 
      </Canvas> 
     </VisualBrush.Visual> 
    </VisualBrush> 
</ResourceDictionary> 

はあなたの資産の全てへの参照が含まれているのResourceDictionaryを定義します。あなたのApp.xamlでXAML

<ResourceDictionary 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" > 
    <ResourceDictionary.MergedDictionaries> 
     <ResourceDictionary Source="Category/my-asset.xaml" /> 
     {...} 
    </ResourceDictionary.MergedDictionaries> 
</ResourceDictionary> 

はAssets.xaml

をロード

これを使用すると、四角形のブラシが好きな場所でグラフィックを使用できます。

<Rectangle Grid.Row="2" Fill="{StaticResource my-asset}" Height="16" Width="16" /> 
関連する問題