読者です 読者をやめる 読者になる 読者になる

しっぽを追いかけて

ぐるぐるしながら考えています

Unity と猫の話題が中心   掲載内容は個人の私見であり、所属組織の見解ではありません

Xamarin Logo Maker に SVG 読み込み機能を追加しました

C# UWP Windows ランタイムアプリ Windows 10 Xamarin XAML

OS をいちからインストールしなおして 10.10240 版の UWP SDK で Xamarin Logo Maker を修正し・・・

Xamarin Logo Maker – Microsoft ストアの Windows アプリ

f:id:matatabi_ux:20160227230050p:plain

無事 SVG 画像を前景ロゴとしてインポートできるようになりました!

主な修正箇所は下記のような感じ

if (control.IsSvg)
{
    await control.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal,
    () =>
    {
        control.xamlImage.Children.Clear();
        var doc = SvgDocument.Parse(control.Source);
        control.svgImage.Content = doc;
        if (doc.RootElement.ViewPort.HasValue)
        {
            control.svgImage.Width = doc.RootElement.ViewPort.Value.Width;
            control.svgImage.Height = doc.RootElement.ViewPort.Value.Height;
        }
    });
}
else
{
    var content = XamlReader.Load(control.Source) as FrameworkElement;
    if (content == null)
    {
        return;
    }
    control.xamlImage.Children.Clear();
    control.xamlImage.Children.Add(content);
}

これはロゴを描画する UserControl のコードビハインドです

control.IsSvg が true の場合、SVG 描画モードになり、control.Source に入った SVGxml を読み込んで描画します

svgImage は利用させていただいた Svg for Xaml Library の SvgImage です

コードビハインド上で SvgImage を生成して View に突っ込んでも描画できなかったので、初めから XAML<SvgImage><Viewbox> の内部に埋め込んでいます

また、SvgImage の Width と Height も明示的に指定することと、UI スレッド上で操作する必要もあったようです

f:id:matatabi_ux:20160227231034p:plain

とにもかくにも SVG 画像が読み込めるようになったので、PowerPointGoogle ドキュメントなど多くの SVG 作成ソフト編集したベクター画像を使えるようになりました

Win2D と Svg for Xaml Library さまさまですね