【问题标题】:VisualStateManager.GoToState always returning falseVisualStateManager.GoToState 总是返回 false
【发布时间】:2013-04-04 01:22:44
【问题描述】:

这把我难住了。所以我有以下示例应用程序,当鼠标悬停在边框元素上时,它应该为边框元素的不透明度设置动画。 `

<UserControl.Resources>
    <Style x:Key="borderstyle" TargetType="ContentControl">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="ContentControl">
                    <Grid>

                        <VisualStateManager.VisualStateGroups>

                            <VisualStateGroup>
                                <VisualState x:Name="FirstState">
                                    <Storyboard>
                                        <DoubleAnimation To="1.0" Storyboard.TargetName="border" Storyboard.TargetProperty="Opacity" FillBehavior="HoldEnd"/>
                                    </Storyboard>
                                </VisualState>
                            </VisualStateGroup>

                        </VisualStateManager.VisualStateGroups>

                        <Border Background="Blue" x:Name="border" Opacity="0.0"/>

                    </Grid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>

    </Style>
</UserControl.Resources>


<Grid x:Name="LayoutRoot" Background="White">
    <Border BorderBrush="Red" BorderThickness="1" Width="51" Height="51">
        <ContentControl Width="50" Height="50" Style="{StaticResource borderstyle}"  MouseEnter="OnMouseEntered" />
    </Border>
</Grid>

`

在后面的代码中我有以下代码...

    private void OnMouseEntered(object sender, MouseEventArgs e)
    {
        bool status = VisualStateManager.GoToState(this, "FirstState", true);
    }

然后……什么都没有发生。 status 始终为 false,并且动画永远不会触发。

我不确定这里缺少什么。

【问题讨论】:

    标签: silverlight-4.0 visualstatemanager


    【解决方案1】:

    您应该指定您的ContentControl 作为状态变化的控件:

    private void OnMouseEntered(object sender, MouseEventArgs e)
    {
        bool status = VisualStateManager.GoToState((ContentControl)sender, "FirstState", false);
    }
    

    【讨论】:

    • 哇...很酷,谢谢。这很完美。我想我被难住了,因为我通常构建自定义控件并传递“this”效果很好。现在看起来很明显:) 谢谢
    【解决方案2】:

    ApplyTemplate() 添加到您的控件(在动态(以编程方式)添加控件时需要。

    【讨论】:

      【解决方案3】:

      在页面加载事件处理程序中或之后随时使用 VisualStateManager 进行状态转换

      【讨论】:

        猜你喜欢
        • 2021-07-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-20
        • 2021-11-05
        • 2018-11-05
        • 2019-05-06
        相关资源
        最近更新 更多