0
我想制作产品配置器。我想用xaml矢量图形在主窗口中显示产品,然后导出一个dxf文件(作为技术图纸).dxf导出已可用。将现有的XAML矢量图形放入画布中
产物的主要部分drawed用线,在这里没有问题(drawed为矩形)。但其他安装更复杂,例如230V插座。插座是静态的,所以我不需要用代码绘制它。我用Inkscape创建了一个outlet.xaml文件。如何将该xaml文件放置在画布上的特定位置(坐标)上?
在DXF是很容易 - 我创建了一个块作为外部DXF文件,我可以像这样的图形中插入:
DxfDocument doc = new DxfDocument();
doc.DrawingVariables.InsUnits = DrawingUnits.Millimeters;
//Insert existing DXF
netDxf.Blocks.Block Steckdose = netDxf.Blocks.Block.Load("Steckdose.dxf");
Insert i = new Insert(Steckdose, new Vector2(200,200));
doc.AddEntity(i);
doc.Save("test.dxf");
有没有办法做到这一点使用XAML?请注意:网点的数量和位置应该是可变的,所以我想用c#代码来绘制它们。
为了测试,我制作了一个带两个文本框的窗口:一个用于矩形的一个,一个用于插座的x坐标。 那是到目前为止我的代码:
private void button_Click(object sender, RoutedEventArgs e)
{
int value1;
int value2;
if (int.TryParse(txt_laenge.Text, out value1) & int.TryParse(txt_laenge.Text, out value2))
{
Länge = value1;
int SD = value2;
var rechteck = new System.Windows.Shapes.Rectangle();
rechteck.Stroke = new SolidColorBrush(Colors.Black);
rechteck.Height = 136;
rechteck.Width = Länge;
Canvas.SetLeft(rechteck,0);
Canvas.SetTop(rechteck, 0);
IV.Children.Clear();
IV.Children.Add(rechteck);
//Place Steckdose.xaml at coordinates (SD, 68);
}
else
{
MessageBox.Show("Ungültige Eingabe!");
}
}
编辑:Steckdose(出口)的.xaml看起来像这样:
<?xml version="1.0" encoding="UTF-8"?>
<!--This file is NOT compatible with Silverlight-->
<Viewbox xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" Stretch="Uniform">
<Canvas Name="svg8" Width="44" Height="44">
<Canvas.RenderTransform>
<TranslateTransform X="0" Y="0"/>
</Canvas.RenderTransform>
<Canvas.Resources/>
<!--Unknown tag: sodipodi:namedview-->
<!--Unknown tag: metadata-->
<Canvas Name="layer1">
<Canvas.RenderTransform>
<TranslateTransform X="0" Y="-253"/>
</Canvas.RenderTransform>
<Rectangle xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Canvas.Left="0.13150091" Canvas.Top="253.1315" Width="43.737" Height="43.737" RadiusX="4.4731021" RadiusY="4.4731021" Name="rect3680" Fill="#FF008000" StrokeThickness="0.26300183" Stroke="#FF000000"/>
<Ellipse xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Canvas.Left="2.7" Width="38.6" Canvas.Top="255.7" Height="38.6" Name="path4487" Fill="#FF008000" StrokeThickness="0.35593221" Stroke="#FF000000"/>
<Ellipse xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Canvas.Left="9.7" Width="4.6" Canvas.Top="272.7" Height="4.6" Name="path4491" Fill="#FF000000" StrokeThickness="0.36692113" Stroke="#FF000000"/>
<Ellipse xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Canvas.Left="29.7" Width="4.6" Canvas.Top="272.7" Height="4.6" Name="path44915" Fill="#FF000000" StrokeThickness="0.36692113" Stroke="#FF000000"/>
</Canvas>
</Canvas>
</Viewbox>
取决于确切的对象类型包含在outlet.xaml中。您可以使用'XamlReader.Load()'加载XAML,并将返回值转换为适当的类型。然后将加载的对象添加到您的画布。 – Clemens
你不能创建一个UserControl并使用生成的Xaml? – Ron