0

私のXAMLは次のとおりです。

<Grid Name="grid">
            <Viewbox Name="viewBox"  Grid.Column="0" Grid.Row="0">
                <Grid>
                    <Image Name="image" />
                    <Canvas Name="canvas" />
                </Grid>
            </Viewbox>
        </Grid>

ご覧のとおり、グリッドにキャンバスと画像のコントロールがあり、画像上に描画を実行できます。

ロードしているすべての画像のdpiは同じです-72。

画像が読み込まれると、データを取得して描画を実行します。

var ellipse = new Ellipse
                {
                    Width = 100,
                    Height = 100,
                    Cursor = Cursors.Hand,
                    Fill = new SolidColorBrush(Colors.Green),
                    Stroke = new SolidColorBrush(Colors.Black),
                    StrokeThickness = 1
                };
            canvas.Children.Add(ellipse);
            Canvas.SetLeft(ellipse, 10);
            Canvas.SetTop(ellipse, 10);

ただし、画像によって楕円の見え方が異なるように見えます。そのサイズは、ロードされた画像のサイズによって異なります。ロードされた画像の解像度が大きい場合-楕円は小さいです。ロードされた画像の解像度が小さい場合-楕円が大きすぎます。

同じ物理サイズの楕円を描画するにはどうすればよいですか?

楕円コントロールにSnapsToDevicePixelsプロパティを適用しようとしましたが、機能しませんでした。

4

1 に答える 1

0

コードの問題は、画像コントロール、つまり内部グリッドが常に読み込まれた画像のサイズを取得することです。次に、ビューボックスは、外側のグリッド(セル)に収まるようにすべてを拡大縮小します。明らかに、Canvasとその子要素も同じスケーリング係数でスケーリングします。したがって、さまざまなサイズの画像をロードすると、さまざまなサイズの楕円が観察されます。

解決策は、ビューボックスを使用しないことです。Stretchプロパティをに設定しない限り、Imageコントロールはすでに表示されている画像を拡大縮小しますNone。したがって、ビューボックスはまったく必要ありません。Imageコントロールに適切なサイズを指定するには、そのいずれか、または両方を設定する必要がWidthありHeightます。

<Grid>
    <Image Name="image" Width="120" />
    <Canvas Name="canvas" />
</Grid>
于 2013-03-04T14:59:02.813 に答える