我已经创建了一个模板来修改常规的WPF ProgressBar .
一切都运行正常,问题在于启动动画的DataTrigger . 我想在属性“IsIndeterminate”设置为True时触发动画 .
此示例工作正常==>打开视图时动画正确启动
<ProgressBar Grid.Row="3" Style="{StaticResource DotMoveProgressBar}" IsIndeterminate="TRUE" />
此示例显示DataTrigger:
<Style x:Key="DotMoveProgressBar" TargetType="{x:Type ProgressBar}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ProgressBar}">
[... "template" ...]
<ControlTemplate.Triggers>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, Path=IsIndeterminate}" Value="True">
<DataTrigger.EnterActions>
<BeginStoryboard>
<Storyboard RepeatBehavior="Forever">
[...]
</Storyboard>
</BeginStoryboard>
</DataTrigger.EnterActions>
</DataTrigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
当我从ViewModel绑定属性时出现问题 .
<ProgressBar Grid.Row="3" Style="{StaticResource DotMoveProgressBar}" IsIndeterminate="{Binding IsLoadingData}" />
当我在ViewModel中将“IsLoadingData”设置为TRUE时,动画不会启动 .
The question is :
当IsIndeterminatate为“HardCoded”为TRUE而不是绑定到“IsLoadingData”时,为什么anamation正在工作?
/!\ I've tested those things :
-
绑定"IsLoadingData"在其他对象上工作正常 . (测试按钮IsEnable属性)
-
在code-beind中将"IsIndeterminate"设置为true时不起作用 .
所以我认为这是一个DataTrigger问题/技巧/ ...
(除非这是唯一的解决方案,否则我不想发挥可见性)
谢谢你的帮助 !
(请原谅我英语不好: - /)
UPDATE :感谢KingKing的评论,这是问题的下一步:
我做了什么:
-
将DataTriggerExitActions添加到DataTrigger
-
使用TemplateBinding而不是RelativeSource Self
这让我想到了真正的问题:这个绑定到按钮的命令方法工作正常
Public Sub TestFunction()
IsLoadingData = Not IsLoadingData
End Sub
此异步命令方法使DataTrigger无法正确响应
Private Async Sub SelectFileToOpenAsync()
IsLoadingData = True
Await Task.Run(AddressOf LoadFile)
Await GenerateScenario()
End Sub
使用异步方法似乎使DataTrigger无法正常工作