コードでWPF Pathオブジェクトを生成したい。
XAMLではこれを行うことができます。
<Path Data="M 100,200 C 100,25 400,350 400,175 H 280">
コードで同じことを行うにはどうすればよいですか?
Path path = new Path();
Path.Data = "foo"; //This won't accept a string as path data.
PathDataの文字列をPathGeometryなどに変換するクラス/メソッドがありますか?
確かにXAMLが解析され、データ文字列が変換されますか?
var path = new Path();
path.Data = Geometry.Parse("M 100,200 C 100,25 400,350 400,175 H 280");
Path.DataはGeometryタイプです。を使用して リフレクター JustDecompile (eff Red Gate)、TypeConverterAttribute(xamlシリアライザーがstring
型の値をGeometry
型に変換するために使用する)のGeometryの定義を見ました。これにより、GeometryConverterが示されました。実装を確認すると、Geometry.Parse
は、パスの文字列値をGeometryインスタンスに変換します。
バインディングメカニズムを使用できます。
var b = new Binding
{
Source = "M 100,200 C 100,25 400,350 400,175 H 280"
};
BindingOperations.SetBinding(path, Path.DataProperty, b);
それがあなたのお役に立てば幸いです。
元のテキスト文字列からジオメトリを作成するには、System.Windows.Media.FormattedTextクラスとBuildGeometry()メソッドを使用できます。
public string Text2Path()
{
FormattedText formattedText = new System.Windows.Media.FormattedText("Any text you like",
CultureInfo.GetCultureInfo("en-us"),
FlowDirection.LeftToRight,
new Typeface(
new FontFamily(),
FontStyles.Italic,
FontWeights.Bold,
FontStretches.Normal),
16, Brushes.Black);
Geometry geometry = formattedText.BuildGeometry(new Point(0, 0));
System.Windows.Shapes.Path path = new System.Windows.Shapes.Path();
path.Data = geometry;
string geometryAsString = geometry.GetFlattenedPathGeometry().ToString().Replace(",",".").Replace(";",",");
return geometryAsString;
}