Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > WPF и Silverlight > Отрисовка объектов за пределами Canvas


Автор: RuBoris 23.1.2009, 13:45
Привет всем.
Скажите, можно ли изменить такую особенность отрисовки: когда я рисую какой-нибудь объект например прямоугольник, он выходит за пределы Canvas. Как сделать чтобы прямоуголник не покинул область Canvas, а просто обрезался?

Вот такой фрагмент XAML:
Код

<Grid Width="443.191" Height="316.809">
    <Canvas Name="MyCanvas" Background="LightGray" Margin="66.5,57,86.521,116.638" >
    <Rectangle Width="100" Height="200" Fill="DarkGray" />
    </Canvas>
</Grid>

Автор: rooks 25.1.2009, 02:49
Код
<Canvas ... ClipToBounds="True">

Автор: RuBoris 27.1.2009, 17:13
хмм...а у меня такого свойства не видно, вот такая ошибка:
Unknown attribute ClipToBounds on element Canvas.

нашел один не очень красивый метод:
в xaml делаем такое объявление
Код

<Grid Width="443.191" Height="316.809">
    <Canvas Name="MyCanvas" Background="LightGray" Margin="66.5,57,86.521,116.638" >
       <Canvas.Clip>
           <RectangleGeometry Name="MyRect"/>
    </Canvas.Clip>
       <Rectangle Width="100" Height="200" Fill="DarkGray" />
    </Canvas>
</Grid>


а потом в коде
Код

MyRect.Rect = new Rect(0,0,300,300);


в качестве значений конструктору для Rect можно передавать MyCanvas.ActualHeight и MyCanvas.ActualWidth,...вот только откуда достать значения((
ведь при наступлении события MyCanvas.Loaded значения MyCanvas.ActualHeight и MyCanvas.ActualWidth еще не инициализированы

ЗЫ: помогите плиз

Автор: RuBoris 2.2.2009, 12:25
Всё очень просто оказалось, я просто не обратил внимание на то, что у меня позиционирование задается с помощью свойства Margin. Чтобы получить размеры Canvas при инициализации нужно явно ей задать свойства Width и Height
Код

<Canvas Name="MyCanvas" Width="100" Height="50">
  <Canvas.Clip>
    <RectangleGeometry Name="MyRect"/>
  </Canvas.Clip>
...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)