WPF: когда WrapPanel заполнен - PullRequest
       8

WPF: когда WrapPanel заполнен

0 голосов
/ 04 февраля 2009

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

Есть ли способ определить, когда WrapPanel заполнена? Затем я перейду на другую панель с анимацией.

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

Ответы [ 2 ]

0 голосов
/ 05 февраля 2009

На самом деле использование WrapPanel для того, чего вы пытаетесь достичь, не кажется хорошей идеей.

"[...] Затем я перейду на другую панель с анимацией."

Это будет макет анимации макета, что тоже не просто.

Вы должны написать свой собственный класс панели: см. здесь или (анимированный) здесь

0 голосов
/ 04 февраля 2009

Вот пример использования ScrollViewer с триггером, чтобы определить, будет ли он отображаться с использованием ScrollableHeight . Прямо сейчас это просто меняет текст, но вы можете делать другие вещи. При удалении одного из прямоугольников сработает триггер:

<Grid xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      xmlns:sys="clr-namespace:System;assembly=mscorlib"
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
      Width="100" Height="50">
    <ScrollViewer x:Name="scrollViewer" VerticalScrollBarVisibility="Hidden">
        <WrapPanel>
            <Rectangle Width="50" Height="20" Fill="Red"/>
            <Rectangle Width="50" Height="20" Fill="Blue"/>
            <Rectangle Width="50" Height="20" Fill="Green"/>
            <Rectangle Width="50" Height="20" Fill="Yellow"/>
            <Rectangle Width="50" Height="20" Fill="Orange"/>
        </WrapPanel>
    </ScrollViewer>
    <TextBlock IsHitTestVisible="False">
        <TextBlock.Style>
            <Style TargetType="{x:Type TextBlock}">
                <Setter Property="Text" Value="Clipped"/>
                <Style.Triggers>
                    <DataTrigger Binding="{Binding ElementName=scrollViewer, Path=ScrollableHeight}" Value="0">
                        <Setter Property="Text" Value="Not Clipped"/>
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </TextBlock.Style>
    </TextBlock>
</Grid>

Вы также можете запускать на основе ScrollViewer.ComputedVerticalScrollBarVisibility , но для этого требуется, чтобы ScrollBar действительно был видимым, тогда как при запуске на основе ScrollableHeight ScrollBar может быть скрыт. 1010 *

...