0

我的 XAML 是:

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

如您所见,我在 Grid 中有 Canvas 和 Image 控件来执行对 Image 的绘图。

我正在加载的所有图像都具有相同的 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

您的代码的问题在于 Image 控件以及内部 Grid 始终获取加载图像的大小。Viewbox 然后缩放所有内容以适应外部网格(单元格)。显然,这也会按相同的缩放因子缩放 Canvas 及其子元素。因此,在加载不同大小的图像时,您会观察到不同大小的椭圆。

解决方案是不使用 Viewbox。Image 控件已经缩放了显示的图像,除非您将其Stretch属性设置为None。因此,您根本不需要 Viewbox。您应该通过设置它的Width或它的Height,或者两者兼而有之,为 Image 控件提供适当的大小。

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