PRISM WPF и MaterialDesignInXaml переходник - PullRequest
0 голосов
/ 30 марта 2020

Я пытаюсь использовать Transitioner из MaterialDesignInXaml с приложением PRISM 7 WPF в качестве региона для получения анимации при навигации. Оба «работают» вместе в том смысле, что навигация по представлениям успешна, но оживляет только первое представление. После осмотра я создал свой собственный RegionAdapter с новым RegionBehavior, который я скопировал из PRISM , чтобы поиграть.

Мне пришла в голову мысль, что, возможно, обработчики событий синхронизации сработали до того, как у переходного устройства была возможность создать свои контейнеры, которые позволяют его анимацию. Подозрительное поведение, которое я заметил, было то, что когда эта строка выполняла , она очищала SelectedItem Transitioner и анимация не запускалась. (Это было в прошлую пятницу в конце дня, поэтому я извиняюсь, что это немного нечетко в понедельник утром.)

Итак, я добавил действительно сложный механизм, позволяющий переходу «догонять» (await Task.Delay(1) ) в эквиваленте этой строки и анимация начала работать. Теперь он не очищает SelectedItem, когда представление деактивировано.

Мой вопрос: почему и как я могу сделать это более элегантно? У меня нет опыта работы с пользовательскими элементами управления пользовательским интерфейсом WPF. Мне не очень нравится то, что у меня есть, это в основном раздвоенный SelectorRegionAdapter с состоянием гонки, ожидающим наступления.

1 Ответ

0 голосов
/ 03 апреля 2020

Я закончил копаться в кодовой базе MaterialDesignInXaml и обнаружил, что Transitioner не запускает анимацию, пока представление не загружено. В итоге я заменил свой Task.Delay(1) на обработчик событий для события FrameworkElement.Loaded.

Так что в итоге я использовал 90% библиотеки SelectorRegionAdapter, за исключением случаев, когда он выбирает новые активные представления, которые я слушаю для Loaded, а затем как только это происходит, я выбираю новый вид.

...