如何设置WPF GeometryDrawing的绝对位置?

时间:2010-12-21 20:40:21

标签: wpf

如何设置GeometryDrawing的绝对位置? 目前,该线总是在中心绘制。 我猜LineGeometery始终遵循图像控件上的对齐。

以下是我正在使用的一些(现在编辑过的)代码:

<Window x:Class="WpfProblem.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow"   >
<Grid Width="450" Height="160" Background="Beige" VerticalAlignment="Stretch">
    <Border BorderBrush="Lime" BorderThickness="1" CornerRadius="80" Background="#1AFF0000" Margin="0">
        <Image Width="420" Height="120" Stretch="None" >
            <Image.Source>
                <DrawingImage>
                    <DrawingImage.Drawing>
                        <GeometryDrawing>
                            <GeometryDrawing.Geometry>
                                <LineGeometry StartPoint="0,30" EndPoint="299,30"/>
                            </GeometryDrawing.Geometry>
                            <GeometryDrawing.Pen>
                                <Pen Thickness="5" Brush="Black"/>
                            </GeometryDrawing.Pen>
                        </GeometryDrawing>
                    </DrawingImage.Drawing>
                </DrawingImage>
            </Image.Source>
        </Image>
    </Border>
</Grid>
</Window>

3 个答案:

答案 0 :(得分:1)

我相信你的问题(除了上面没有编译的代码,因为Image.Source没有Width和Height属性)并不是你的GeometryDrawing居中,而是你的Canvas居中。

要证明这一点,只需将画布的背景设为红色:

<Canvas Width="350" Height="180" Background="Red">

您的GeometryDrawing位于此居中的画布中的适当位置。

Geometry Drawing Example

如果您希望Canvas适合整个窗口,请不要设置显式宽度和高度,将Horizo​​ntalAlignment和VerticalAlignment设置为Stretch:

<Canvas HorizontalAlignment="Stretch" 
        VerticalAlignment="Stretch" 
        Background="Blue">

得到:
Stretch Canvas

答案 1 :(得分:1)

看起来像垂直&amp; Horizo​​ntalAlignment影响DrawImage的内部绘制。因此,根据VerticalAlignment,将在最终图像的顶部,中心或底部绘制一条水平线。我现在将Drawing嵌入到具有所需绝对定位的FrameworkElement中。

根据利兹的评论更正。

答案 2 :(得分:0)

如果在图像上将Stretch =“None”更改为Stretch =“Fill”,它将使用整个空间。它不会填满边框的整个大小,因为您指定了高度和宽度。

现在,如果您使用GeometryGroup,您可以指定任意类型的行,路径等。然后将拉伸它以填充图像空间。

<GeometryGroup>
    <LineGeometry StartPoint="0,0" EndPoint="410,0"/>
    <LineGeometry StartPoint="0, 100" EndPoint="410, 0"/>
</GeometryGroup>

将绘制线条以“适合”您的图像。 我想,这更接近你想要的东西。将“拉伸”保留为“无”,将在图像的中心绘制对象,并且在重新调整图像大小时不会拉伸它们。

这似乎是使用ImageDrawing的两种选择,无论是居中还是绘制都适合。