[解決済み] WPF WPFでSVGファイルをアイコンとして使用する正しい方法は何ですか?
質問
どなたか、これを行うための推奨の Step by Step を説明していただけませんか?
ステップ1. SVGをXAMLに変換する...それは簡単です。
ステップ2. さて、どうする?
どのように解決するのですか?
あなたのテクニックは、SVG to XAML コンバータがどのような XAML オブジェクトを生成するかに依存します。 それはドローイングを生成しますか? 画像ですか? グリッド? キャンバス? パス? ジオメトリ? それぞれの場合において、あなたのテクニックは異なるでしょう。
以下の例では、最も一般的なシナリオであるボタンにアイコンを使用することを想定していますが、同じテクニックがどの ContentControl でも機能することに注意してください。
アイコンとして描画を使用する
Drawingを使用するには、適切な大きさの矩形をDrawingBrushで描きます。
<Button>
<Rectangle Width="100" Height="100">
<Rectangle.Fill>
<DrawingBrush>
<DrawingBrush.Drawing>
<Drawing ... /> <!-- Converted from SVG -->
</DrawingBrush.Drawing>
</DrawingBrush>
</Rectangle.Fill>
</Rectangle>
</Button>
画像をアイコンにする
画像を直接使用することができます。
<Button>
<Image ... /> <!-- Converted from SVG -->
</Button>
グリッドをアイコンにする
グリッドを直接使用することができます。
<Button>
<Grid ... /> <!-- Converted from SVG -->
</Button>
また、サイズを制御する必要がある場合は、Viewboxに含めることができます。
<Button>
<Viewbox ...>
<Grid ... /> <!-- Converted from SVG -->
</Viewbox>
</Button>
キャンバスをアイコンとして使用する
これは画像やグリッドを使うのと同じですが、キャンバスには固定サイズがないため、高さと幅を指定する必要があります(SVGコンバータで既に設定されている場合を除く)。
<Button>
<Canvas Height="100" Width="100"> <!-- Converted from SVG, with additions -->
</Canvas>
</Button>
パスをアイコンとして使用する
Pathを使用することはできますが、ストロークやフィルを明示的に設定する必要があります。
<Button>
<Path Stroke="Red" Data="..." /> <!-- Converted from SVG, with additions -->
</Button>
または
<Button>
<Path Fill="Blue" Data="..." /> <!-- Converted from SVG, with additions -->
</Button>
ジオメトリをアイコンにする
ジオメトリを描画するためにPathを使用することができます。 ストロークが必要な場合は、ストロークを設定します。
<Button>
<Path Stroke="Red" Width="100" Height="100">
<Path.Data>
<Geometry ... /> <!-- Converted from SVG -->
</Path.Data>
</Path>
</Button>
を設定するか、塗りつぶす必要がある場合は、Fillを設定します。
<Button>
<Path Fill="Blue" Width="100" Height="100">
<Path.Data>
<Geometry ... /> <!-- Converted from SVG -->
</Path.Data>
</Path>
</Button>
データバインディングの方法
SVG -> XAML変換をコードで行っていて、結果のXAMLをデータバインディングを使って表示させたい場合は、以下のいずれかを使用します。
描画をバインドする。
<Button>
<Rectangle Width="100" Height="100">
<Rectangle.Fill>
<DrawingBrush Drawing="{Binding Drawing, Source={StaticResource ...}}" />
</Rectangle.Fill>
</Rectangle>
</Button>
画像をバインドする。
<Button Content="{Binding Image}" />
グリッドをバインドする。
<Button Content="{Binding Grid}" />
ViewboxにGridをバインドする。
<Button>
<Viewbox ...>
<ContentPresenter Content="{Binding Grid}" />
</Viewbox>
</Button>
キャンバスをバインドする。
<Button>
<ContentPresenter Height="100" Width="100" Content="{Binding Canvas}" />
</Button>
パスをバインドする。
<Button Content="{Binding Path}" /> <!-- Fill or stroke must be set in code unless set by the SVG converter -->
ジオメトリをバインドする。
<Button>
<Path Width="100" Height="100" Data="{Binding Geometry}" />
</Button>
関連
-
[解決済み] svg要素の色を変更するには?
-
[解決済み] Do I use <img>, <object>, or <embed> for SVG files?
-
[解決済み] WPFの場合、x:Name属性とName属性の違いは何ですか?
-
[解決済み] ImageMagickでSVGをPNGに変換する方法は?
-
[解決済み] CSSを使用してSVG画像の色を変更する方法(jQuery SVG image replacement)とは?
-
[解決済み] 背景画像として提供されるSVGイメージの塗りつぶし色を変更するには?
-
[解決済み】AndroidでSVGを使う一番簡単な方法は?
-
[解決済み】PNG vs. GIF vs. JPEG vs. SVGの異なるユースケースとは?[クローズド]
-
[解決済み] グリッドカラムの幅・高さを設定する際の「Auto」と「*」の違いは何ですか?
-
[解決済み] WPFでボタンMouseOverのBackgroundを変更するには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
例外の解決方法 GDI+でジェネリックエラーが発生しました。
-
[解決済み] オーバーレイコントロールを他のすべてのコントロールの上に配置するには?
-
[解決済み] WPFとSilverlightの比較[重複]。
-
[解決済み] WPFにDesignModeプロパティはありますか?
-
[解決済み] wpfでスタイル/テンプレートを使用して小数点以下の桁数をフォーマットする方法は?
-
[解決済み] WPF 自分自身へのバインド
-
[解決済み] ObservableCollectionのクリア時にe.OldItemsに項目がない場合
-
[解決済み] WPFでGridViewColumnのデータを自動サイズ調整し、右揃えにする方法は?
-
[解決済み] XAMLにおけるreadonlyプロパティからのOneWayToSourceバインディング
-
[解決済み] このWCFのエラーは何を意味するのでしょうか。"カスタムツールの警告。Cannot import wsdl:portType" です。