0

これは簡単に思えますが、私にはうまくいきません。DB から画像を表示し、同じ座標系を使用して同じ DB からポリゴンをオーバーレイしたいと考えています。

<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 を指定しないと、アプリの実行時に画像が表示されません。画像を十分に大きくすると (例のように)、画像が表示され、コントロールに合わせてサイズが変更されますが、ポリゴン座標系が一致していないようです。

また、「M50,50,12,50,30,30,30,100,100,100」のようになるように、StringFormat を使用して Geometry 仕様の前に M を配置しました。明示的に指定するとポリゴンが表示されますが、同じ文字列でバインドするとポリゴンが表示されません。

これら 2 つの問題が相互に関連しているかどうかは不明です。2 つの問題のいずれかが修正されたら、再評価する必要があります。あなたが提供しなければならないガイダンスをありがとう!

4

1 に答える 1

2

StringFormatバインディングのターゲット タイプは文字列ではなくGeometryであるため、バインディングの設定はここでは無視されます。

Geometry には属性設定があるため、プロパティによって返される文字列Coordinatesは暗黙的に 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 に答える