这看起来很简单,但它对我不起作用。我想从我的数据库中显示一个图像,并使用相同的坐标系覆盖同一个数据库中的多边形。
<Image Name="imgColl" Stretch="Fill" MaxWidth="190" MinHeight="70">
<Image.Source>
<DrawingImage>
<DrawingImage.Drawing>
<DrawingGroup>
<ImageDrawing ImageSource="{Binding ImageData}" Rect="0,0,590,590"/>
<GeometryDrawing Geometry="{Binding Coordinates, StringFormat=M\{0\}}">
<GeometryDrawing.Pen>
<Pen Thickness="4" LineJoin="Bevel" Brush="OrangeRed"/>
</GeometryDrawing.Pen>
</GeometryDrawing>
</DrawingGroup>
</DrawingImage.Drawing>
</DrawingImage>
</Image.Source>
</Image>
我发现我必须在ImageDrawing对象上指定Rect。这很不幸,因为我正在加载的图像大小不同。但是,如果我没有指定Rect,则运行应用程序时不会显示图像。如果我使图像足够大(如示例中所示),图像确实会出现,并且它会调整大小以适合我的控件,但多边形坐标系似乎不匹配。
另外,我已经使用StringFormat将M放在Geometry规范的前面,因此它出现如下:“M50,50,12,50,30,30,30,100,100,100”。如果我明确指定,则会出现多边形,但如果我用相同的字符串绑定它,则不会出现多边形。
不确定这两个问题是否相互关联 - 当两者中的任何一个被修复时,我不得不重新评估。感谢您提供的任何指导!
答案 0 :(得分:2)
此处忽略绑定的StringFormat
设置,因为绑定的目标类型不是字符串,而是Geometry。
Coordinates
属性返回的字符串会隐式转换为Geometry,因为Geometry具有[TypeConverterAttribute(typeof(GeometryConverter))]
属性设置,但不会应用StringFormat。您需要添加绑定Converter。
关于ImageDrawing.Rect
的另一个问题:就我理解的ImageDrawing而言,你总是需要指定绘图矩形,默认为Rect.Empty
。也许你也可以将Rect
属性绑定到数据对象的某个属性。
无论如何,为了维护图像和多边形的公共坐标系,定义这样的东西会不会更简单?
<Viewbox MaxWidth="190" MinHeight="70">
<Canvas>
<Image Stretch="None" Source="{Binding ImageData}" />
<Path Stroke="OrangeRed" StrokeThickness="4" StrokeLineJoin="Bevel"
Data="{Binding Coordinates}" />
</Canvas>
</Viewbox>