2010-06-22 4 views
1

Я хочу, чтобы элемент интерфейса WPF отображался вертикально, когда его свойство Visibility переходит на «Visible». Я не хочу жестко кодировать Height в анимации, так как я хотел бы применить эту анимацию к любому элементу интерфейса в качестве стиля. Итак, я пытаюсь использовать ScaleY, но мне не повезло. Вот XAML для стиля и ListBox:Как оживить ScaleY, когда элемент станет видимым

<Style x:Key="VerticalGrow" TargetType="ListBox"> 
    <Style.Triggers> 
     <Trigger Property="Visibility" Value="Visible"> 
      <Trigger.EnterActions> 
       <BeginStoryboard> 
        <Storyboard> 
         <DoubleAnimation Storyboard.TargetProperty="TransformGroup.ScaleTransform.ScaleY" BeginTime="0:0:0.5" From="0" To="1" Duration="0:0:0.5" /> 
        </Storyboard> 
       </BeginStoryboard> 
      </Trigger.EnterActions> 
     </Trigger> 
    </Style.Triggers> 
</Style> 


<ListBox Grid.Row="2" MaxHeight="60" MinHeight="60" Visibility="{Binding MyViewModel.ListBoxVisibility}" IsSynchronizedWithCurrentItem="False" ItemsSource="{Binding MyViewModel.ListBoxItems}" Style="{DynamicResource VerticalGrow}" IsTabStop="True"> 
</ListBox> 

я получаю исключение во время выполнения жалуясь, что:

«Невозможно преобразовать значение атрибута„Стиль“для объекта типа«System.Windows.Style 'Невозможно разрешить все ссылки на свойства в пути свойств' TransformGroup.RenderTransform.ScaleTransform.ScaleY '. Убедитесь, что применимые объекты поддерживают свойства. Ошибка в объекте' System.Windows.Controls.ListBox 'в файле разметки' MyApp; component/mainwindow .xaml 'Строка 69 Позиция 399. "}

ответ

2

ListBox не имеет свойства TransformGroup. Я думаю, вы хотите установить RenderTransform или LayoutTransform в ScaleTransform, а затем оживить это.

<Style x:Key="VerticalGrow" TargetType="ListBox"> 
    <Setter Property="RenderTransform"> 
     <Setter.Value> 
      <ScaleTransform/> 
     </Setter.Value> 
    </Setter> 
    <Style.Triggers> 
     <Trigger Property="Visibility" Value="Visible"> 
      <Trigger.EnterActions> 
       <BeginStoryboard> 
        <Storyboard> 
         <DoubleAnimation 
          Storyboard.TargetProperty="RenderTransform.ScaleY" 
          BeginTime="0:0:0.5" From="0" To="1" Duration="0:0:0.5" /> 
        </Storyboard> 
       </BeginStoryboard> 
      </Trigger.EnterActions> 
     </Trigger> 
    </Style.Triggers> 
</Style> 
+0

Спасибо. Это работает, хотя теперь я понимаю, что моя анимация не делает именно то, что я хочу, но это не имеет никакого отношения к вашему ответу. – Emmanuel

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