VisualStateManager ничего не делает (silverlight) - PullRequest
2 голосов
/ 15 октября 2010

Я создаю пользовательский элемент управления, используя studio 2010 и silverlight 4. Я пытаюсь использовать визуальный менеджер состояний.

Со следующим xml:

<ResourceDictionary
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:vsm="clr-namespace:System.Windows;assembly=System.Windows"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:controls="clr-namespace:SilverView">
    <Style TargetType="controls:ScaleImage">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="controls:ScaleImage">
                    <Grid>
                        <VisualStateManager.VisualStateGroups>
                            <VisualStateGroup x:Name="CommonStates">
                                <VisualStateGroup.Transitions>
                                    <VisualTransition To="MouseOver"
                                                      GeneratedDuration="0:0:.5"/>
                                    <VisualTransition To="Normal"
                                                      GeneratedDuration="0:0:.5"/>
                                </VisualStateGroup.Transitions>
                                <VisualState x:Name="Normal">
                                    <Storyboard>
                                        <DoubleAnimation
                                        Storyboard.TargetName="img"
                                        Storyboard.TargetProperty="Width"
                                        From="50" To="100"/>
                                    </Storyboard>
                                </VisualState>
                                <VisualState x:Name="MouseOver">
                                    <Storyboard>
                                        <DoubleAnimation
                                        Storyboard.TargetName="img"
                                        Storyboard.TargetProperty="Width"
                                        From="50" To="100"/>
                                    </Storyboard>
                                </VisualState>
                            </VisualStateGroup>
                        </VisualStateManager.VisualStateGroups>
                        <Image Name="img" Width="50">
                            <Image.RenderTransform>
                                <ScaleTransform x:Name="scale"/>
                            </Image.RenderTransform>
                        </Image>
                    </Grid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</ResourceDictionary>

Ничего не происходит при наведении мыши на изображение. Как получить изображение, чтобы увеличить его, когда мышь находится над ним?

Спасибо

Ответы [ 2 ]

4 голосов
/ 15 октября 2010

Прикрепленное свойство VisualStateManager.VisualStateGroups определяет набор визуальных состояний, однако имена групп и имена состояний являются просто именами, они фактически не включают функциональность, которую они описывают автоматически.

Все готовокодировать в вашем контроле, чтобы решить, когда он находится в определенном состоянии, а затем сообщить VisualStateManager об этом выборе.Вы делаете это с помощью кода, подобного следующему: -

VisualStateManager.GotoState(this, "MouseOver", true);

Как правило, вы собираете информацию, например, находится ли мышь над управлением через различные события управления, и имеете центральную функцию UpdateVisualState, которая устанавливает все соответствующие состояния..

2 голосов
/ 15 октября 2010

В приведенном выше XAML вы определяете только группы состояний и состояния с такими именами, как "MouseOver".Вы на самом деле не вызываете изменения состояния, поскольку они, очевидно, не связаны с какими-либо событиями.

Если вы этого еще не сделали, попробуйте использовать поведения GoToState , чтобы вызвать изменения состояния вашего элемента управления.

У вас есть еще код или XML, которые вызываютизменение состояния?

...