【发布时间】:2016-03-19 03:24:04
【问题描述】:
我希望我的应用程序在每次发生特定事件时将椭圆动画到一个新位置。出于测试目的,我制作了一个更改视图模型属性的按钮,并且该属性绑定到触发动画的数据触发器,但稍后我希望视图模型根据我尚未实现的其他事件触发它 - 这就是为什么我可以'不要在视图中直接使用绑定到该按钮的事件触发器,我需要视图模型。 因为椭圆应该在每次被触发时被动画移动到一个新位置,所以我需要将 DoubleAnimation 的 TO-Property 绑定到视图模型中的一个值。当我使用普通事件触发器时,这可以正常工作,但使用数据触发器会使 XamlParser 与该绑定崩溃。除了 XAMLParseException,我没有收到任何特定错误,但是,如果我将绑定更改为固定值,例如 5,它会正常工作。
这是 xaml:
<Window x:Class="AnimationExample.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:AnimationExample"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="525">
<Window.DataContext>
<local:MainWindowViewModel />
</Window.DataContext>
<Canvas Name="CanvasWrapper" Width="525" Height="350">
<Button Content="Next Animation" Command="{Binding NextAnimation}"/>
<Ellipse Fill="Red" Width="60" Height="60" Canvas.Left="60" Canvas.Top="60">
<Ellipse.Style>
<Style>
<Style.Triggers>
<DataTrigger Binding="{Binding CanAnimate}" Value="True" >
<DataTrigger.EnterActions>
<BeginStoryboard >
<Storyboard>
<!-- Works fine without the binding -->
<DoubleAnimation
Storyboard.TargetProperty="(Canvas.Left)"
Duration="0:0:10" To="{Binding NextPosX}" />
</Storyboard>
</BeginStoryboard>
</DataTrigger.EnterActions>
</DataTrigger>
</Style.Triggers>
</Style>
</Ellipse.Style>
</Ellipse>
</Canvas>
</Window>
我相信解析器无法找到绑定的正确路径,即使代码完成显示了它。有没有办法让我获得正确的绑定路径?
【问题讨论】:
标签: c# wpf mvvm storyboard datatrigger