Используя анимацию Раскадровки на программно добавленном управлении

Я использую, чтобы столкнуться с той же проблемой. Я заставил свой экран Post прослушивать событие фокусировки навигации, вызванное react-nativation здесь вместо componentDidMount.

import React from 'react';
import { View } from 'react-native';
import { NavigationEvents } from 'react-navigation';

const Post = () => (
  
     console.log('will focus',payload)}
      onDidFocus={payload => console.log('did focus',payload)} // 
      onWillBlur={payload => console.log('will blur',payload)}
      onDidBlur={payload => console.log('did blur',payload)}
    />
    {/* 
      Your view code
    */}
  
);

С помощью onDidFocus вы можете получить параметр навигации, получить данные и / или обновить состояние. При необходимости вы можете очистить состояние экрана нажатием onDidBlur.

Кроме того, вы можете сделать императивное кодирование как этот документ здесь

Обновление:

Кстати, мне интересно, почему вы поставили Post с Drawer? Это просто ссылка в ящике, которая может получить доступ к странице поста?

По моему мнению, вы должны переместить Home и Post в новый стек и сделать Home в качестве начального маршрута. Это обеспечит размонтирование Почты после перехода назад к Home.

Посмотрите мой образец ниже

const HomeStack = createStackNavigatior({
   Home: {screen: Home},
   Post: {screen: Post},
}, {
   initialRouteName: 'Home', 
   ...
})

const Drawer = createDrawerNavigator(
{
    HomeStack
    Settings: {screen: Settings}
},
{
    initialRouteName: "HomeStack",
    backBehavior: 'initialRoute',
    contentOptions: {
    activeTintColor: "#e91e63"
    },
    contentComponent: props => ,
}
);

37
задан Cœur 10 April 2017 в 16:34
поделиться

3 ответа

Я не извел бы с NameScopes и т.д. и буду скорее использовать Раскадровку. SetTarget вместо этого.

var b = new Button() { Content = "abcd" };
stack.Children.Add(b);

var fade = new DoubleAnimation()
{
    From = 0,
    To = 1,
    Duration = TimeSpan.FromSeconds(5),
};

Storyboard.SetTarget(fade, b);
Storyboard.SetTargetProperty(fade, new PropertyPath(Button.OpacityProperty));

var sb = new Storyboard();
sb.Children.Add(fade);

sb.Begin();
60
ответ дан 27 November 2019 в 04:32
поделиться

Я соглашаюсь, namescopes являются, вероятно, неправильной вещью использовать для этого сценария. Намного более простой и легкий для использования SetTarget, а не SetTargetName.

В случае, если это помогает кому-либо еще, вот то, что я раньше выделял конкретную ячейку в таблице с выделением, которое не затухает ни к чему. Это немного похоже на выделение StackOverflow, когда Вы добавляете новый ответ.

    TableCell cell = table.RowGroups[0].Rows[row].Cells[col];

    // The cell contains just one paragraph; it is the first block
    Paragraph p = (Paragraph)cell.Blocks.FirstBlock;

    // Animate the paragraph: fade the background from Yellow to White,
    // once, through a span of 6 seconds.

    SolidColorBrush brush = new SolidColorBrush(Colors.Yellow);
    p.Background = brush;
    ColorAnimation ca1 = new ColorAnimation()
    {
            From = Colors.Yellow,
            To = Colors.White,
            Duration = new Duration(TimeSpan.FromSeconds(6.0)),
            RepeatBehavior = new RepeatBehavior(1),
            AutoReverse = false,
    };

    brush.BeginAnimation(SolidColorBrush.ColorProperty, ca1);
5
ответ дан Cheeso 27 November 2019 в 04:32
поделиться

Я решил проблему, используя этот параметр в качестве параметра в методе begin, попробуйте:

sb.Begin(this);

Поскольку имя зарегистрировано в окне.

12
ответ дан 27 November 2019 в 04:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: