我已经创建了一个模板来修改常规的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无法正常工作