2009-02-04 4 views
0

J'utilise un WrapPanel pour afficher les éléments de hauteur variable dans les colonnes. Le wrappanel a une taille contrainte.WPF: Quand un WrapPanel est-il plein

Existe-t-il un moyen de déterminer quand le WrapPanel est «plein»? Je vais ensuite faire la page sur un autre panneau avec une animation.

J'ai regardé le ArrangeOverride des éléments qui sont les enfants des panneaux, mais ils semblent toujours obtenir tout l'espace qu'ils veulent. J'ai besoin d'un moyen de déterminer quand ils commencent à se couper.

Répondre

0

Voici un exemple utilisant un ScrollViewer avec un déclencheur pour déterminer s'il s'afficherait en utilisant ScrollableHeight. En ce moment, ça change juste du texte mais vous pouvez faire d'autres choses. Retrait de l'un des Rectangles se déclenche la gâchette:

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

Vous pouvez également déclencher en fonction de ScrollViewer.ComputedVerticalScrollBarVisibility, mais qui exige ScrollBar être réellement visible, alors que lorsque vous déclenchez basé sur ScrollableHeight, ScrollBar peut être caché.

0

En fait, l'utilisation d'un WrapPanel pour ce que vous essayez de réaliser ne semble pas être une bonne idée.

"[...] Je passerai alors à la page d'un autre panneau avec une animation."

Il s'agirait de mise en page pour l'animation de mise en page ce qui n'est pas facile, aussi.

Vous devez écrire votre propre classe de panneau: voir here ou (animée) here