Как включить рисование элемента вне его контейнера? - PullRequest
4 голосов
/ 01 декабря 2009

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

<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

1 Ответ

5 голосов
/ 01 декабря 2009

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

<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>

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

...