椭圆无法在数据触发器中旋转

  • 本文关键字:触发器 旋转 数据 wpf
  • 更新时间 :
  • 英文 :


当ProgressBar在DataTrigger中设置为true时,我想旋转椭圆。但这不起作用。我测试椭圆是否可以使用不透明度。但它不适用于RotateTransform。椭圆也可以使用EventTrigger。

这是我的错误以及我如何修复它。

感谢您阅读我的文章。

<Ellipse Name="ProgressEllipse" Width="40" Height="40" StrokeThickness="7" Stroke="{StaticResource ProcessEllipseGradient}" Margin="5,0,0,0">
<Ellipse.RenderTransform>
<RotateTransform CenterX="20" CenterY="20" Angle="0"/>
</Ellipse.RenderTransform>
<!--<Ellipse.Triggers>
<EventTrigger RoutedEvent="Ellipse.Loaded" SourceName="ProgressEllipse">
<BeginStoryboard>
<Storyboard>
<DoubleAnimation
Storyboard.TargetName="ProgressEllipse"
Storyboard.TargetProperty="(Ellipse.RenderTransform).(RotateTransform.Angle)"
From="0"
To="360"
Duration="0:0:1"
RepeatBehavior="Forever" />
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Ellipse.Triggers>-->
<Ellipse.Style>
<Style TargetType="{x:Type Ellipse}">
<Style.Triggers>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, Path=ProgressBar}" Value="True">
<DataTrigger.EnterActions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation
Storyboard.TargetProperty="(Ellipse.RenderTransform).(RotateTransform.Angle)"
From="0"
To="1"
Duration="0:0:5"
RepeatBehavior="Forever"/>
</Storyboard>
</BeginStoryboard>
</DataTrigger.EnterActions>
</DataTrigger>
</Style.Triggers>
</Style>
</Ellipse.Style>
</Ellipse>

附加信息

对不起WPF。我的问题不清楚。当椭圆直接位于表单中时,它可以正常工作。但当位于模板中时,它不起作用。

跟随是我的密码。https://www.mediafire.com/?7rb8gvthx94rfiy

如果我省略";RelativeSource={RelativeSsource self}";在触发器中。它将引发异常(无法设置"(0)"的动画。(1) '在不可变对象实例上)

在示例代码中。我有三个椭圆。当我在模板中定位左椭圆时,它不起作用(我试图让它起作用,但它不起)。中心椭圆与模板中的椭圆代码相同。但当我直接在表单中定位它时,它可以正常工作。我在模板中测试椭圆的Opacity属性。而且还可以。我不知道哪一个是我的错。

你能帮我一把吗。

感谢阅读我的问题

Ellipse.ProgressBar属性在WPF中不存在。您可能引用了Ellipse的基础DataContext中的某些属性。

因此,将Binding="{Binding RelativeSource={RelativeSource Self}, Path=ProgressBar}"更改为简单的Binding="{Binding Path=ProgressBar}"

还要确保此ProgressBar属性生成属性更改通知,以便触发器执行操作。。。

另外,你还应该有一个EndStoryBoard

<Ellipse.Style>
<Style TargetType="{x:Type Ellipse}">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=ProgressBar}" 
Value="True">
<DataTrigger.EnterActions>
<BeginStoryboard Name="MyStoryboard">
<Storyboard>
<DoubleAnimation
Storyboard.TargetProperty="(Ellipse.RenderTransform).(RotateTransform.Angle)"
From="0"
To="1"
Duration="0:0:5"
RepeatBehavior="Forever"/>
</Storyboard>
</BeginStoryboard>
</DataTrigger.EnterActions>
<DataTrigger.ExitActions>
<StopStoryboard BeginStoryboardName="MyStoryboard"/>
</DataTrigger.ExitActions>
</DataTrigger>
</Style.Triggers>
</Style>
</Ellipse.Style>

最新更新