我有一张图片(画布内)。我需要在文本框中指定图像的坐标,我希望图像中心位于此点(而不是其左上角)。我怎么能这样做?
更新:我不需要将图片放在画布的中心。我希望图像的位置由图像中心定义。例如,我有一个代码:<Image source"..." canvas.Left="0" canvas.Top="0">
,此点(0,0)表示图像中心位于画布的左上角。
答案 0 :(得分:4)
使用附加属性设置位置:
如果您想放在中心位置,请设置
Canvas.SetLeft(image, (canva.Width - Image.Width) / 2);
Canvas.SetTop(image, (canva.Height- Image.Height) / 2);
同时查看Align images in WPF canvas in center
<强>更新强>
Canvas.SetLeft(image, Image.Width / 2);
Canvas.SetTop(image, Image.Height / 2);
您可以根据行为进行设置,例如
<Window x:Class="WpfSample.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity" xmlns:wpfSample="clr-namespace:WpfSample"
Title="MainWindow"
Width="800"
Height="800"
Background="Gray">
<Border Width="400"
Height="400"
HorizontalAlignment="Center"
VerticalAlignment="Center"
BorderBrush="Black"
BorderThickness="2">
<Canvas >
<Rectangle Fill="OrangeRed" Width="150" Height="150">
<i:Interaction.Behaviors>
<wpfSample:CenterBehavior/>
</i:Interaction.Behaviors>
</Rectangle>
</Canvas>
</Border>
</Window>
和行为(原始样本)
public class CenterBehavior : Behavior<FrameworkElement>
{
protected override void OnAttached()
{
base.OnAttached();
UpdatePosition();
AssociatedObject.SizeChanged += OnSizeChanged;
}
private void UpdatePosition()
{
Canvas.SetLeft(AssociatedObject, -AssociatedObject.Width/2);
Canvas.SetTop(AssociatedObject, -AssociatedObject.Height/2);
}
private void OnSizeChanged(object sender, SizeChangedEventArgs e)
{
UpdatePosition();
}
}
答案 1 :(得分:1)
只需将Image.Width
值的一半减去当前Canvas.Left
值,然后将Image.Height
值的一半减去当前Canvas.Top
值。