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>
Таким образом, изображение и холст сгруппированы по родительской сетке, которая трансформируется.