GoToStateAction引起的麻烦

时间:2011-04-15 14:29:49

标签: silverlight datatemplate datatrigger

我在不同的场景中遇到过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>

2 个答案:

答案 0 :(得分:0)

我认为你应该在GoToStateAction中设置TargetName,因为默认情况下,如果我的记忆正确地为我服务,则Target与GoToStateAction对象相关联,在你的情况下 - 椭圆

答案 1 :(得分:0)

加载项目时不会触发GoToStateAction,只有在更改相关属性时才会触发GoToStateAction(触发PropertyChanged事件)。