Как правило, вместо CallMethodAction
вы можете использовать ControlStoryboardAction
.Это специфическое поведение, созданное для поддержки управления элементом Storyboard
:
<Storyboard x:Name="ShowOverlay">
...
</Storyboard>
<core:DataTriggerBehavior Binding="{Binding LogUploadStatus, Converter={StaticResource LogUploadStatusToBoolConverter}, ConverterParameter={StaticResource LogUploadStatusIdle}}" Value="False">
<core:ControlStoryboardAction Storyboard="{StaticResource ShowOverlay}"
ControlStoryboardOption="Play" />
</core:DataTriggerBehavior>
Что касается того, почему ControlMethodAction
не работал, в режиме Release компилятор .NET Native удаляет все, что не используется, так чтоэто может минимизировать размер получаемой сборки, а также оптимизировать производительность.К сожалению, это может вызвать проблемы при использовании отражения для доступа к типам и элементам, к которым нет прямого доступа.
В этом случае метод Storyboard.Begin()
никогда не используется напрямую, и если вы проверите исходный код из CallMethodAction
, вы можете обнаружить, что действие использует отражение для обнаружения методов в TargetObject
:
foreach (MethodInfo method in this.targetObjectType.GetRuntimeMethods())
{
...
}
К счастью, есть способ заставить компилятор .NET Native напрямую включать тип и помочь вам сделать это, вы можете использовать MissingMetadataException Troubleshooter (названо тем, что большую часть времени это исключение вы получите, когда тип отсутствует).
В этом случае я указал полный путь к Storyboard
(Windows.UI.Xaml.Media.Animation.Storyboard
) введите Один тип раздел инструмента:
![I reflect on a single type](https://i.stack.imgur.com/OYIKI.png)
И ниже выбрал Доступ к элементам или активация и Только открытые типы и члены .
В правой части инструмент сгенерирует объявление <Type>
, которое необходимо добавить к элементу <Application>
в * 1047.Файл * default.rd.xml , который вы можете найти в папке Properties Проект UWP.В нашем случае результат может выглядеть следующим образом (исключая комментарии):
<Directives xmlns="http://schemas.microsoft.com/netfx/2013/01/metadata">
<Application>
<Assembly Name="*Application*" Dynamic="Required All" />
<Type Name="Windows.UI.Xaml.Media.Animation.Storyboard" Dynamic="Required Public" />
</Application>
</Directives>