我在不同的场景中遇到过GoToStateAction的几个问题,我开始相信这个功能有问题,或者我对它的理解是关闭的。
在这种情况下,我有一个带有椭圆的数据模板,表示连接器。连接器具有IsConnected属性...我使用VisualStates和带有DataTrigger的GoToStateAction在2个状态“已连接”和“未连接”之间切换。但是,在这种情况下,状态永远不会设置。
我知道模型设置正确,因为尝试使用IsConnected的其他绑定方案可以正常工作。我做错了什么?
<DataTemplate x:Key="ConnectorTemplate">
<Grid x:Name="grid">
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="ConnectionStates">
<VisualState x:Name="Connected">
<Storyboard>
<ColorAnimation Duration="0" To="#FFEAFFDD" Storyboard.TargetProperty="(Shape.Fill).(GradientBrush.GradientStops)[1].(GradientStop.Color)" Storyboard.TargetName="ellipse" d:IsOptimized="True"/>
<ColorAnimation Duration="0" To="#FF56992B" Storyboard.TargetProperty="(Shape.Fill).(GradientBrush.GradientStops)[0].(GradientStop.Color)" Storyboard.TargetName="ellipse" d:IsOptimized="True"/>
</Storyboard>
</VisualState>
<VisualState x:Name="NotConnected"/>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<VisualStateManager.CustomVisualStateManager>
<ei:ExtendedVisualStateManager/>
</VisualStateManager.CustomVisualStateManager>
<Ellipse x:Name="ellipse"
Height="8"
Width="8">
<i:Interaction.Triggers>
<ei:DataTrigger Binding="{Binding IsConnected}" Value="true">
<ei:GoToStateAction StateName="Connected"/>
</ei:DataTrigger>
<ei:DataTrigger Binding="{Binding IsConnected}" Value="false">
<ei:GoToStateAction StateName="NotConnected"/>
</ei:DataTrigger>
</i:Interaction.Triggers>
<Ellipse.Fill>
<RadialGradientBrush Center="0.275,0.262"
GradientOrigin="0.275,0.262"
RadiusX="0.566"
RadiusY="0.566">
<GradientStop Color="#FF333333"
Offset="1" />
<GradientStop Color="#FFC4C4C4" />
</RadialGradientBrush>
</Ellipse.Fill>
</Ellipse>
</Grid>
</DataTemplate>
答案 0 :(得分:0)
我认为你应该在GoToStateAction中设置TargetName,因为默认情况下,如果我的记忆正确地为我服务,则Target与GoToStateAction对象相关联,在你的情况下 - 椭圆
答案 1 :(得分:0)
加载项目时不会触发GoToStateAction,只有在更改相关属性时才会触发GoToStateAction(触发PropertyChanged事件)。