Установите положение с помощью Attached свойства:
Если вы хотите разместить в центре, установите
Canvas.SetLeft(image, (canva.Width - Image.Width)/2);
Canvas.SetTop(image, (canva.Height- Image.Height)/2);
Также смотрите Align images in WPF canvas in center
Update
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();
}
}
Почему бы не установить 'RenderTransform' вашего изображения до половины высоты/ширины? Либо это, либо использовать «Конвертер». У меня есть простой [Math Converter] (http://rachel53461.wordpress.com/tag/math-converter/), размещенный в моем блоге, который я обычно использую, и его легко распространить на «MultiConverter», который принимает множественные ограничения значения (такие как 'TextBox.Text' и' Image.Height/Width') – Rachel