2009-12-01 2 views
3

Я пытаюсь получить элементы для визуализации за пределами их родительской панели, в этом случае я использую панель стека.Как включить элемент для рисования за пределами его контейнера?

<StackPanel ClipToBounds="False" Width="200" Orientation="Horizontal" Height="50" 
      Background="{DynamicResource TierBackground}"> 
    <Rectangle ClipToBounds="False" VerticalAlignment="Bottom" Width="25" Height="75" 
       Fill="#FF4D6072" /> 
</StackPanel> 

Установка ClipToBounds, кажется, не делать ничего, я впервые попробовал его на Rectangle, а затем на родительской панели, хотя ни казалось, чтобы помочь.

UPDATE

Оно кажется Canvas контейнер отличием ClipToBounds собственность, но ни один другой контейнер, кажется, это честь.

UPDATE

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

Это было достигнуто с использованием нескольких холстов, уложенных внутри родителя StackPanel с элементами дочернего продукта, имеющими свойство Canvas.Bottom, равное 0. В то время как это работает, это означает, что я должен установить каждый элемент продукта «Слева» и не может иметь макет позиционирует продукт автоматически.

StackPanels http://img263.imageshack.us/img263/8682/stackpanels.jpg

ответ

4

Вы можете управлять визуализацией, установив свойство Margin. Например, установите его отрицательное значение, чтобы ваш прямоугольник окрашивается снаружи StackPanel:

<Rectangle ClipToBounds="False" VerticalAlignment="Bottom" Width="25" Height="75" 
        Margin="-50,-50,0,0" 
      Fill="#FF4D6072" /> 

EDIT:

Вот пример использования свойства Margin, чтобы произвести что-то похожее на ваш случай:

http://img139.imageshack.us/img139/8357/rectangleoutsidepanel.gif

<Window x:Class="RectangleOutsidePanel.Window1" 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
Title="Window1" Height="300" Width="300"> 
<Grid> 
    <DockPanel LastChildFill="False"> 
     <StackPanel Background="LightBlue" Height="50" DockPanel.Dock="Top"/> 
     <StackPanel Orientation="Horizontal" Height="50" Background="Brown" DockPanel.Dock="Top"> 
      <Rectangle 
       VerticalAlignment="Bottom" Width="30" Height="75" Margin="5,-500,5,0" 
       Fill="#FF4D6072" /> 
      <Rectangle 
       VerticalAlignment="Bottom" Width="25" Height="80" Margin="5,-500,5,0" 
       Fill="#FF4D6072" /> 
     </StackPanel> 
    </DockPanel> 
</Grid> 
</Window> 

Обратите внимание на трюк использования сколь угодно большого отрицательного числа для поля, поэтому вам не нужно его вычислять.

+0

Это, похоже, не работало для меня в 'StackPanel', если бы это было сделано, мне нужно было бы рассчитать сумму, которую объект будет распространяться за пределы для каждого элемента. –

+0

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