2012-06-23 3 views
2

У меня есть Canvas с Rectangle:Изменить масштаб Прямоугольник внутри Canvas

<Canvas> 
    <Rettangle/> 
</Canvas> 

И я хочу, чтобы, когда я изменить размер моего холста, прямоугольник сохранить ту же относительную позицию, например:

---------------------------------------- 
|          | 
|          | 
|   ____      | 
|   | |      | 
|   |____|      | 
|          | 
|-------------------------------------- 


-------------------- 
|     | 
| ___    | 
| |__|   | 
|     | 
|------------------- 

Как я могу это сделать?

+0

Вы просто хотите, чтобы позиция прямоугольника была относительной или ее размер тоже? из изображения он выглядит как. – akjoshi

+0

@akjoshi обе, размер тоже. – Nick

+0

Если вы примените ScaleTransform к холсту, я думаю, что он это сделает. –

ответ

4

Почему бы не поставить весь материал в a Viewbox?

<Viewbox Stretch="Fill"> 
    <Canvas Width="400" Height="300"> 
     <Rectangle Canvas.Left="100" Canvas.Top="100" Width="100" Height="100" Fill="Blue"/> 
    </Canvas> 
</Viewbox> 
+0

Почему у 'Canvas' есть определенные' Width' и 'Height'? Я хочу, чтобы «Canvas» заполнял все свободное пространство внутри моего «окна». – Nick

+0

Итак, если моя Windows изменилась, мне нужно изменить размер моего холста динамически? – Nick

+0

Вы можете придать ему любую ширину и высоту, которые вам нравятся. Он просто должен иметь фиксированный размер по сравнению с содержащимся прямоугольником. Размер холста и размер и положение прямоугольника должны иметь определенное предопределенное отношение. Вы также можете установить Canvas.Width = 1.0 и Rectangle.Width = 0.25. – Clemens

1

наилучшим решением является, чтобы создать свой собственный холст и осуществить повторную калибровку и повторное позиционирование, используя некоторые из методов, указанных в этих вопросах -

How do you do relative positioning in WPF?

WPF: Setting the Width (and Height) as a Percentage Value

Но для меня эта функциональность выглядит очень похоже на масштабирование; в случае, если Ваше окно только при наличии Canvas можно попробовать использовать следующие ZoomableCanvas из Kael Роуэн и явно штобы/Отдалиться когда окно повторно размеры:

http://blogs.msdn.com/b/kaelr/archive/2010/07/29/zoomablecanvas.aspx

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