2013-11-29 2 views
1

У меня есть изображение (внутри холста). Мне нужно указать координаты изображения в текстовом поле, и я хочу, чтобы изображение в центре было в этом месте (а не в верхнем левом углу). Как я могу это сделать?Как разместить изображение по центру, а не по левому верхнему углу?

Обновление: Мне не нужно размещать свое изображение в центре холста. Я хочу, чтобы положение изображения определялось image центр. Например, у меня есть код: <Image source"..." canvas.Left="0" canvas.Top="0">, и эта точка (0,0) означает, что центр изображения находится в верхнем левом углу холста.

+0

Почему бы не установить 'RenderTransform' вашего изображения до половины высоты/ширины? Либо это, либо использовать «Конвертер». У меня есть простой [Math Converter] (http://rachel53461.wordpress.com/tag/math-converter/), размещенный в моем блоге, который я обычно использую, и его легко распространить на «MultiConverter», который принимает множественные ограничения значения (такие как 'TextBox.Text' и' Image.Height/Width') – Rachel

ответ

4

Установите положение с помощью Attached свойства:

  • 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

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(); 
    } 
} 
+0

Мне не нужно размещать изображение в центре холста. Я хочу, чтобы положение изображения ** определялось ** его центром. Например, у меня есть код: , и эта точка (0,0) означает, что ** центр изображения ** находится в верхний левый угол ** холста **. – Victor

+0

, чтобы уточнить, вы хотите, чтобы ваше положение изображения было установлено относительно центра холста? Итак, если вы установите Canvas.Left = "- 12", значит, это будет Canvas.Width/2-12? – Artiom

+0

Я обновил вопрос, пожалуйста, перечитайте его. – Victor

1

Просто вычесть половину вашего Image.Width значения текущего значения Canvas.Left и вычесть половину вашего значения Image.Height текущего значения Canvas.Top.

Смежные вопросы