2015-10-13 5 views
2

Я пытаюсь сделать слайд в & из анимации с C# & WPF.Вставка слайдов и слайдов

До сих пор мне удалось закодировать следующие строки:

XAML:

<Grid Name="grid" Grid.Column="0" Grid.Row="1"> 
     <Border Name="border" Background="Red"></Border> 
</Grid> 

C#:

private void Button_Click(object sender, RoutedEventArgs e) { 
      border.Height = grid.ActualHeight; 
      if (!isOpen) { 
       isOpen = true; 
       DoubleAnimation db = new DoubleAnimation(); 
       db.From = 0; 
       db.To = grid.ActualHeight; 
       db.Duration = TimeSpan.FromSeconds(0.5); 
       border.BeginAnimation(Grid.HeightProperty, db); 
      } else { 
       isOpen = false; 
       DoubleAnimation db = new DoubleAnimation(); 
       db.From = grid.ActualHeight; 
       db.To = 0; 
       db.Duration = TimeSpan.FromSeconds(0.5); 
       border.BeginAnimation(Grid.HeightProperty, db); 
      } 
     } 

Хорошая вещь, что анимация выполняется. Плохо то, что эта анимация имеет неправильный эффект, я имею в виду, что анимация идет от вершины к середине и внизу к середине (например, если она уменьшалась) ...

Как я могу сделать (или изменить в своем фактическом коде) эффект слайда (сверху вниз & внизу вверх)?

Он должен быть в коде C#.

+0

Вы не можете использовать xaml для обработки анимации? –

ответ

3

Вы пытаетесь перевести элемент управления пользовательского интерфейса, так что используйте TranslateTransform (Canvas.Top возможно, если вы находитесь на холсте, но неэффективно).

Измените XAML включить рендер преобразование устанавливается в TranslateTransform объекта:

<Grid Name="grid" Grid.Column="0" Grid.Row="1" ClipToBounds="true"> 
    <Border Name="border" Background="Red"> 
     <Border.RenderTransform> 
      <TranslateTransform x:Name="borderTransform"/> 
     </Border.RenderTransform> 
    </Border> 
</Grid> 

И анимировать Y свойство преобразования:

DoubleAnimation db = new DoubleAnimation(); 
db.From = 0; 
db.To = grid.ActualHeight; 
db.Duration = TimeSpan.FromSeconds(0.5); 
borderTransform.BeginAnimation(TranslateTransform.YProperty, db); 

Точно так же вы знаете, делают это всего лот очиститель с помощью объекта Storyboard (плюс вы можете установить его в XAML!)

+0

Спасибо за ваш anwser, как можно закодировать это поведение на XAML? –

+0

@BradleyDotNET Я получаю следующую ошибку в XAML: член «Имя» не распознается или не доступен: «« –

+0

@FernandoSantiago Возможно, вам придется использовать x: Name вместо этого. Вы также можете получить к нему доступ через свойства объектов «Border», но это просто немного чище. – BradleyDotNET

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