C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

ツリー一括表示

C#WPFで、SvgFileのXamlへの変換結果について /かい (18/01/01(Mon) 18:06) #86229
Re[1]: C#WPFで、SvgFileのXamlへの変換結果について /Hongliang (18/01/01(Mon) 20:17) #86231
  └ Re[2]: C#WPFで、SvgFileのXamlへの変換結果について /かい (18/01/01(Mon) 22:08) #86232 解決済み


親記事 / ▼[ 86231 ]
■86229 / 親階層)  C#WPFで、SvgFileのXamlへの変換結果について
□投稿者/ かい (1回)-(2018/01/01(Mon) 18:06:03)

分類:[C#] 

お世話になっています。
環境はVisualStudio2017 C# WPFです。

SVGをXAMLへ変換したのですが、XAMLのフォーマット(?)に則っていないようで、
FrameコントロールのSourceプロパティに格納するとブレークモードになります。

以下のXAMLをご覧いただき、どのように修正すればいいかお教え頂けないでしょうか。


-調べたこと-
調べた結果、変換後のXAMLには二つの問題があることがわかりました。

1.Canvas.Resources内のタグであるPATHにKeyが振られていない。
これは適当な値をKeyとして指定することで解決できました

2.CanvasのStyleの設定が誤っており、エラーが発生する。
エラー内容は以下の通りです。
「StyleのTypeConverterは、文字列から他の値への変換をサポートしていません。」

XAMLでプロパティの値を文字列で指定したのを、
実際の型に変換を行うのがTypeConverterということを調べる途中で学びました。
文字列で指定が出来ないなら、では他で何が変換出来るのかを調べるところで、躓きました。


-変換後XAML-
<Canvas Width="640" Height="640" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"><Canvas.RenderTransform><TranslateTransform X="0" Y="0" /></Canvas.RenderTransform>

<Canvas.Resources><Path Name="cU4rIfbwi" Fill="#000000" Data="M433.48 252.54C433.48 310.73 378.43 357.98 310.62 357.98C242.81 357.98 187.75 310.73 187.75 252.54C187.75 194.34 242.81 147.1 310.62 147.1C378.43 147.1 433.48 194.34 433.48 252.54Z" />
<Path Name="d15Hj9xp9D" Fill="#000000" Data="M411.59 249.63C411.59 293.4 366.35 328.94 310.62 328.94C254.89 328.94 209.65 293.4 209.65 249.63C209.65 205.86 254.89 170.33 310.62 170.33C366.35 170.33 411.59 205.86 411.59 249.63Z" />
</Canvas.Resources>
<Canvas Style="#cU4rIfbwi" />

<Canvas Style="#d15Hj9xp9D" />
</Canvas>

-背景-
ジャギー等を回避する為、SVGを扱いたいと思っています。
以下のページを参考にし、SVGをXAMLへ変換しました。
http://notjustones.blogspot.jp/2008/07/converting-svg-to-xaml.html

[ □ Tree ] 返信 編集キー/

▲[ 86229 ] / ▼[ 86232 ]
■86231 / 1階層)  Re[1]: C#WPFで、SvgFileのXamlへの変換結果について
□投稿者/ Hongliang (592回)-(2018/01/01(Mon) 20:17:06)
単純には、わざわざResourcesに格納せずとも、直接Canvasの子要素に指定すればいい気がしますが。
<Canvas Width="640" Height="640">
  <Path Fill="#000000" Data="M433.48 中略 252.54Z" />
  <Path Fill="#000000" Data="M411.59 中略 249.63Z" />
</Canvas>

> 1.Canvas.Resources内のタグであるPATHにKeyが振られていない。
> これは適当な値をKeyとして指定することで解決できました
Resourcesの中で定義したオブジェクトをプロパティに設定するには、以下のような記述が必要です。
HTMLと違って#などは使用しません(その代わりが{StaticResource ...}というマークアップ拡張です)。
<Parent.Resources>
  <Hoge x:Key="ResName" .../>
</Parent.Resources>
<Fuga Piyo="{StaticResource ResName}" .../>

> 2.CanvasのStyleの設定が誤っており、エラーが発生する。
StyleプロパティにはStyleオブジェクトを格納する必要があります。
が、恐らく記述されている意図としてはStyleプロパティに(リソース内の)Pathオブジェクトを設定しようとされています。
Pathオブジェクトはビジュアル要素であり、通常、親の要素の子として記述します
(例えば冒頭に示したように、Canvasの子要素とするなど)。

[ 親 86229 / □ Tree ] 返信 編集キー/

▲[ 86231 ] / 返信無し
■86232 / 2階層)  Re[2]: C#WPFで、SvgFileのXamlへの変換結果について
□投稿者/ かい (2回)-(2018/01/01(Mon) 22:08:06)
提示して頂いたソースを参考に試行し、表示できることを確認しました。
ありがとうございます。
(この程度のSVGなら似たようなものをBlendでつくったほうが早そうですね。今気づきました)

解決済み
[ 親 86229 / □ Tree ] 返信 編集キー/


管理者用

- Child Tree -