2

Studio 2010 と Silverlight 4 を使用してカスタム コントロールを構築しています。Visual State Manager を使用しようとしています。

次の 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>

画像の上にマウスを置いても何も起こりません。マウスが上にあるときに画像を拡大するにはどうすればよいですか?

ありがとう

4

2 に答える 2

4

添付のVisualStateManager.VisualStateGroupsプロパティは視覚的な状態のセットを定義しますが、グループの名前と状態の名前は単なる名前であり、実際にはそれらが自動的に記述する機能を有効にしません。

それが特定の状態にあるときを決定し、次にVisualStateManagerその選択を通知するのは、コントロールのコード次第です。あなたはこのようなコードでそれを行います:-

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

通常、マウスがさまざまな制御イベントを介して制御上にあるかどうかなどの情報を収集し、UpdateVisualStateすべての適切な状態を設定する中央機能を備えています。

于 2010-10-15T08:01:32.643 に答える
2

上記のXAMLでは、「MouseOver」のような名前の状態グループと状態のみを定義しています。明らかにどのイベントにも接続されていないため、実際には状態を変更していません。

まだ行っていない場合は、GoToState動作を使用して、コントロールの状態変化をトリガーしてみてください。

状態変化をトリガーするコードまたはXMLは他にありますか?

于 2010-10-15T07:57:33.857 に答える