如何设置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>
答案 0 :(得分:1)
我相信你的问题(除了上面没有编译的代码,因为Image.Source没有Width和Height属性)并不是你的GeometryDrawing居中,而是你的Canvas居中。
要证明这一点,只需将画布的背景设为红色:
<Canvas Width="350" Height="180" Background="Red">
您的GeometryDrawing位于此居中的画布中的适当位置。
如果您希望Canvas适合整个窗口,请不要设置显式宽度和高度,将HorizontalAlignment和VerticalAlignment设置为Stretch:
<Canvas HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
Background="Blue">
得到:
答案 1 :(得分:1)
看起来像垂直&amp; HorizontalAlignment影响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的两种选择,无论是居中还是绘制都适合。