WPF ZoomControl and Adorners

Это мой первый пост о переполнении стека, надеюсь, я правильно понял. Я использую ZoomControl из расширений WPF для отображения изображения с поддержкой панорамирования и масштабирования:

<DockPanel Grid.Row="1" x:Name="canvas">            
     <Controls:ZoomControl  x:Name="zoomControl">  
        <Canvas x:Name="canvas">     
             <Image x:Name="imageControl" Stretch="None" />
        </Canvas> 
     </Controls:ZoomControl>
</DockPanel>

Когда пользователь выбирает изображение с помощью диалогового окна, я загружаю это изображение так:

  bmp = new BitmapImage(new Uri(fileName));
  this.imageControul.Source = bmp;

Я хотел бы добавить прямоугольники \ украшения в определенные места (пиксельные координаты) на изображении, загруженном пользователем на основе некоторой обработки изображения.

var r = new Rectangle();
 r.StrokeThickness = 5;
 r.Stroke = Brushes.Black;
 r.Fill = Brushes.Transparent;
 r.Width = width;
 r.Height = height;

 Canvas.SetLeft(r, y);
 Canvas.SetTop(r, x);

 canvas.Children.Add(r);

Тем не менее, прямоугольники не размещены в ожидаемых местах? Неправильный масштаб и местоположение.

Спасибо,

Джон

1 ответ

Я ожидаю, что проблема в том, что ваш холст расширяется, чтобы заполнить пространство, а не привязан к прямоугольнику. Посмотрите с помощью такого инструмента, как Snoop, и посмотрите, что представляют собой ограничивающие рамки.

Возможно, вы сможете исправить это с помощью Horizontal и VercticalAlignment на холсте, установите для них любое другое значение, кроме Stretch.

Если это не сработает, реструктурируйте это так

<ZoomBox>
  <Grid>
     <Image/>
     <Canvas/>
  </Grid>
</ZoomBox>

Таким образом, изображение и холст сгруппированы по родительской сетке, которая трансформируется.

Другие вопросы по тегам