如何放置图像的中心,而不是左上角?

时间:2013-11-29 09:28:10

标签: c# wpf xaml

我有一张图片(画布内)。我需要在文本框中指定图像的坐标,我希望图像中心位于此点(而不是其左上角)。我怎么能这样做?

更新:我不需要将图片放在画布的中心。我希望图像的位置由图像中心定义。例如,我有一个代码:<Image source"..." canvas.Left="0" canvas.Top="0">,此点(0,0)表示图像中心位于画布的左上角。

2 个答案:

答案 0 :(得分:4)

使用附加属性设置位置:

  • Canvas.Left
  • Canvas.Top

如果您想放在中心位置,请设置

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值。