0

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

<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 放在几何规范的前面,这样它就变成了这样:“M50,50,12,50,30,30,30,100,100,100”。如果我明确指定,多边形就会出现,但如果我用相同的字符串绑定它,多边形就不会出现。

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

4

1 回答 1

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>
于 2012-02-13T14:41:59.877 回答