显示具有重叠多边形的图像

时间:2012-02-13 14:00:33

标签: wpf geometrydrawing

这看起来很简单,但它对我不起作用。我想从我的数据库中显示一个图像,并使用相同的坐标系覆盖同一个数据库中的多边形。

<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”。如果我明确指定,则会出现多边形,但如果我用相同的字符串绑定它,则不会出现多边形。

不确定这两个问题是否相互关联 - 当两者中的任何一个被修复时,我不得不重新评估。感谢您提供的任何指导!

1 个答案:

答案 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>