2009-02-04 7 views
0

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

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

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

ответ

0

Вот пример использования 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 может быть скрыто.

0

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

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

Это будет макет для макета, что тоже нелегко.

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

Смежные вопросы