VisualStateManager.GoToState всегда возвращает false - PullRequest
0 голосов
/ 17 декабря 2010

Это меня озадачило.Итак, у меня есть следующий пример приложения, которое должно анимировать непрозрачность элемента границы при наведении на него курсора мыши.`

<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 всегда ложно, и анимация никогда не срабатывает.

Я не уверен, чего здесь не хватает.

Ответы [ 3 ]

3 голосов
/ 17 декабря 2010

Вы должны указать свой ContentControl как элемент управления, состояние которого меняется:

private void OnMouseEntered(object sender, MouseEventArgs e)
{
    bool status = VisualStateManager.GoToState((ContentControl)sender, "FirstState", false);
}
1 голос
/ 03 апреля 2013

Использование VisualStateManager для переходов состояний в любое время во время или после обработчика события Page Loaded

1 голос
/ 15 марта 2012

Добавить ApplyTemplate() к вашему элементу управления (необходимо, когда элемент управления добавляется динамически (программно).

...