Как мне замаскировать содержимое WPF Wrappanel? - PullRequest
1 голос
/ 02 января 2012

Привет и спасибо за поиск!

Фон

Это расширение по этому вопросу:

Как мне перемещать дочерние элементы вверх или вниз внутриWPF wrappanel?

В котором я спросил, как можно программно прокрутить содержимое WrapPanel вверх или вниз при нажатии кнопки.На этот вопрос любезно ответили, и принятое решение хорошо работает.

Задача

Теперь, когда мои миниатюры в WrapPanel прокручиваются вверх и вниз при нажатии кнопки, как мне замаскировать WrapPanel чтобы плитки не показывались, когда они находятся за рамкой?Например, у меня есть StackPanel над WrapPanel, который содержит кнопки прокрутки вверх и вниз, но когда я прокручиваю вниз, миниатюры закрывают StackPanel над ними (и кнопками).Вот мой XAML, обратите внимание, что миниатюры добавляются в WrapPanel во время выполнения:

Обновление

Используя XAML Дейва Клеммера, мой макет более устойчив, но затем я заканчиваюс содержанием WrapPanel, затмевающим StackPanel над ним.Пожалуйста, посмотрите эти снимки экрана, сделанные до и после события прокрутки:

ДО ПРОКРУТКИ -

Before Scroll

ПОСЛЕ СВЕРТЫ - enter image description here

Обновление2

Установить холст на красный фон в соответствии с комментарием Дэйва ниже.

ДО ПРОКРУТКИ -

enter image description here

ПОСЛЕ СВИТА-

enter image description here

Ответы [ 2 ]

2 голосов
/ 02 января 2012

Ну, я бы не назвал это интуитивным, но, в конце концов, это сработало:

 <Border Grid.Row="1" Background="Transparent" ClipToBounds="True">       
            <Canvas>
                <WrapPanel x:Name="spContainer"  
                   Width="{Binding ActualWidth,  
                           RelativeSource={RelativeSource AncestorType={x:Type Canvas}}}">
                </WrapPanel>
            </Canvas>
 </Border>

Добавление границы сделало свое дело. Спасибо Дэйву за всю вашу помощь!

1 голос
/ 02 января 2012

Звучит так, будто вы не хотите, чтобы полосы прокрутки (нет ScrollViewer), а хотите, чтобы StackPanel был зафиксирован. Храните StackPanel и WrapPanel в отдельных Grid строках, таких как:

<Grid> 
    <Grid.RowDefinitions> 
        <RowDefinition Height="Auto" /> 
        <RowDefinition Height="*"/> 
    </Grid.RowDefinitions> 
    <StackPanel Grid.Row="0" Height="150" HorizontalAlignment="Left" Margin="30,10,10,10" Name="stackPanel1" VerticalAlignment="Top" Width="Auto" Orientation="Horizontal" >  
        <Label Content="Home Navigator v0.1" FontFamily="Tahoma" FontSize="30" FontWeight="Bold" Foreground="White" />  
        <Button Content="Close" Height="50" Click="Button_Click" VerticalAlignment="Top"></Button>  
        <Button Content="Scroll Down" Height="50" Click="ScrollDown" VerticalAlignment="Top"></Button>  
    </StackPanel>  
    <Canvas Grid.Row="1">  
        <WrapPanel x:Name="spContainer"  
                   Width="{Binding ActualWidth,  
                           RelativeSource={RelativeSource AncestorType={x:Type Canvas}}}">  
        </WrapPanel>      
    </Canvas>  
</Grid>
...