質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
canvas

HTML5の<canvas>要素用のタグです。CanvasはHTML5から導入された、二次元の図形描写が可能な要素です。

SVG

SVGは、XMLを基盤とした2Dベクター画像記述言語。画像を線・面といった図形の集合体として扱うベクター画像のため、環境に適した表示が可能です。アニメーション機能もサポートされており、簡単なインタラクティブコンテンツ作成もできます。

XAML

XAML(Extensible Application Markup Language)はWPF、Silverlight、Windows PhoneそしてWindows Store appsでユーザーインターフェースを定義するために使われるXML言語です。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

Q&A

解決済

1回答

3650閲覧

WPFでsvgファイルのアイコンを表示し、ウィンドウサイズに追従させたい

omikuji-iot

総合スコア46

canvas

HTML5の<canvas>要素用のタグです。CanvasはHTML5から導入された、二次元の図形描写が可能な要素です。

SVG

SVGは、XMLを基盤とした2Dベクター画像記述言語。画像を線・面といった図形の集合体として扱うベクター画像のため、環境に適した表示が可能です。アニメーション機能もサポートされており、簡単なインタラクティブコンテンツ作成もできます。

XAML

XAML(Extensible Application Markup Language)はWPF、Silverlight、Windows PhoneそしてWindows Store appsでユーザーインターフェースを定義するために使われるXML言語です。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

1グッド

1クリップ

投稿2022/02/28 05:52

[開発環境]
・Visual Studio
・WPFアプリ(.NET Framework C#)

[やりたいこと]
WPFでウィンドウサイズに応じてGridの大きさが可変するようにしました。
そのGrid上の画像も一緒に可変したいのですが、下記の方法ではうまくいきませんでした。
考え方や、そもそも方向性が間違っていれば教えていただけないでしょうか?

[ここまでやったこと]
伸縮してもキレイになるようにSVGを使うべきだと考えました。
ただそのままでは使えないようなので、フリーのSVG素材をInkScapeでXAML形式に変換。(下記コード)
そのCanvas部分をGridに貼りつけました。
その後、デザイナでCanvasをButtonにアンカーしたのですが大きさが変わりません。


【xaml変換後データ】

<?xml version="1.0" encoding="UTF-8"?> <!--This file is compatible with Silverlight--> <Canvas xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" Name="svg23" Width="24" Height="24"> <Canvas.RenderTransform> <TranslateTransform X="0" Y="0"/> </Canvas.RenderTransform> <Canvas.Resources/> <!--Unknown tag: sodipodi:namedview--> <Path xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Name="path19" Data="M0 0h24v24H0z"/> <Path xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Name="path21" Fill="#FF000000" Data="M10 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2h-8l-2-2z"/> </Canvas>

【ソースへ貼り付けた状態(抜粋)】
<Grid>
<Canvas xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" Name="svg23" Margin="2">
<Canvas.RenderTransform>
<TranslateTransform X="0" Y="0"/>
</Canvas.RenderTransform>
<Canvas.Resources/>
<!--Unknown tag: sodipodi:namedview-->
<Path xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Name="path19" Data="M0 0h24v24H0z" Margin="0"/>
<Path xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Name="path21" Fill="Tomato" Data="M10 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2h-8l-2-2z" Stretch="Fill" Margin="0"/>
</Canvas>
</Grid>

TN8001👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

アンカーの意味がちょっと分かりませんが大きさを可変にしたいということであれば、Canvasのサイズを入れたうえでViewboxにくるんでください。

xml

1<Window 2 x:Class="Qor75si7rjy4frw.MainWindow" 3 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 4 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 5 Width="800" 6 Height="500"> 7 <UniformGrid Columns="2"> 8 9 <GroupBox Header="original"> 10 <Canvas 11 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 12 Name="svg23" 13 Width="24" 14 Height="24"> 15 <Canvas.RenderTransform> 16 <TranslateTransform X="0" Y="0" /> 17 </Canvas.RenderTransform> 18 <Canvas.Resources /> 19 <!-- Unknown tag: sodipodi:namedview --> 20 <Path 21 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 22 Name="path19" 23 Data="M0 0h24v24H0z" /> 24 <Path 25 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 26 Name="path21" 27 Data="M10 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2h-8l-2-2z" 28 Fill="#FF000000" /> 29 </Canvas> 30 </GroupBox> 31 32 <GroupBox Header="Viewbox"> 33 <Viewbox> 34 <Canvas Width="24" Height="24"> 35 <Path Data="M0 0h24v24H0z" Fill="Gainsboro" /> 36 <Path Data="M10 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2h-8l-2-2z" Fill="Tomato" /> 37 </Canvas> 38 </Viewbox> 39 </GroupBox> 40 </UniformGrid> 41</Window>

アプリ画像


ベクターデータとはいえ何かの基準で座標等があらわされているわけで、今回の場合は24*24として直線やベジェ曲線のデータになっています。
Canvasは絶対配置ですから、大きさを変えても右下方向に余白が増えるだけで、中の図形は変わりません。

大きさを変えるにはCanvas自体を拡大縮小する必要があります。一番簡単なのはViewboxを使うことです。

投稿2022/02/28 08:46

編集2023/07/30 04:56
TN8001

総合スコア9319

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

omikuji-iot

2022/03/02 01:59

ありがとうございます。 教えていただいたViewBoxでうまくいきました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問