如何将图片放置在中心位置而不是左上角?

3
我有一张图片(在画布内)。我需要在文本框中指定图片的坐标,并希望图片中心位于该点(而不是其左上角)。我该怎么做? 更新:我不需要将我的图像放置在画布的中心。我希望图像的位置由图像中心定义。例如,我有一个代码:<Image source"..." canvas.Left="0" canvas.Top="0">,这个点(0,0)意味着图像中心位于画布的左上角。

为什么不将您的图像的RenderTransform设置为其高度/宽度的一半?或者使用Converter。我在我的博客上发布了一个简单的Math Converter(http://rachel53461.wordpress.com/tag/math-converter/),我通常使用它,而且很容易将其扩展为接受多个绑定值的MultiConverter(例如TextBox.Text和Image.Height/Width)。 - Rachel
2个回答

5
使用附加属性设置位置:
  • Canvas.Left
  • Canvas.Top
如果您想把它放在中心,设置
Canvas.SetLeft(image, (canva.Width - Image.Width) / 2);
Canvas.SetTop(image, (canva.Height- Image.Height) / 2);

也可以查看WPF画布中的图片居中对齐 更新
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();
    }
}

我不需要将我的图像放置在画布的中心。我希望图像的位置由其中心定义。例如,我有一个代码:<Image source"..." canvas.Left="0" canvas.Top="0">,这个点(0,0)意味着图像中心位于画布的左上角。 - Victor
只是为了澄清,您希望将图像位置相对于画布中心设置吗?因此,如果您设置Canvas.Left="-12",这意味着它将是Canvas.Width/2-12? - Artiom
这个答案很好,它完成了问题的要求。将此行为分为两个部分非常有用,一个只水平居中,另一个只垂直居中。此外,必须使用ActualHeight属性而不是Height属性。(例如,如果您尝试使TextBlock居中,它的WidthHeight属性可能是NaN,但其实际尺寸将从其中包含的文本计算出。) - Mike Nakis

1
只需从您当前的Canvas.Left值中减去您的Image.Width一半,然后从您当前的Canvas.Top值中减去您的Image.Height一半即可。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接