7

Expression Blend で次の 2 つの状態を定義しました。このガイドに従おうとしてきましたが、状態をいつ、どのように変更するかについての情報が必要なときに、ハングアップしたままになっているように感じます。

ここに画像の説明を入力

ガイドによると、私はビヘイビアー(「GotoState」と仮定します)を私のものにアタッチすることUserControlになっています-残念ながら、実際に持っているとは思いませんUser Control-そして、たとえ持っていたとしても、私PortraitStateと私の両方にビヘイビアーをアタッチする必要がありLandscapeStateますか?

要素に aGotoStateを付けることができるようです。LayoutRootでは、両方の状態で自分の行動をそれに関連付けますか? どんな助けでも大歓迎です。

*編集: xaml.cs ファイルで遊んでいて、これがプログラムで行う方法である可能性があると考えました。向きをデバッグして変更するときに、スイッチケースに入り、正しい向きを見つけます。ただし、状態が切り替わることはありません。私は何を間違っていますか?

    protected override void OnOrientationChanged(OrientationChangedEventArgs e)
    {
        switch (e.Orientation)
        {
            case PageOrientation.Landscape:
                ExtendedVisualStateManager.GoToElementState(root:this.LayoutRoot, stateName: "LandscapeState", useTransitions: true);
                break;
            case PageOrientation.LandscapeRight:
                ExtendedVisualStateManager.GoToElementState(root:this.LayoutRoot, stateName: "LandscapeState", useTransitions: true);
                break;
            case PageOrientation.LandscapeLeft:
                ExtendedVisualStateManager.GoToElementState(root:LayoutRoot, stateName: "LandscapeState", useTransitions: true);
                break;
            case PageOrientation.Portrait:
                ExtendedVisualStateManager.GoToElementState(root:this.LayoutRoot, stateName: "PortraitState", useTransitions: true);
                break;
            case PageOrientation.PortraitUp:
                ExtendedVisualStateManager.GoToElementState(root:this.LayoutRoot, stateName: "PortraitState", useTransitions: true);
                break;
            case PageOrientation.PortraitDown:
                ExtendedVisualStateManager.GoToElementState(root:this.LayoutRoot, stateName: "PortraitState", useTransitions: true);
                break;
            default:
                break;
        }
    }

edit2: 上記を試みると、GotoElementState は false を返し、MSDN によると、「コントロールが新しい状態に正常に遷移した場合は true を返し、それ以外の場合は false を返します。」

今、私は質問を残しています:状態遷移が失敗する原因は何ですか?

4

2 に答える 2

1

次のように WP7 の VisualState を変更します。

    switch (e.Orientation)
    {
        case PageOrientation.Landscape:

           VisualStateManager.GoToState(this, "LandscapeState", true);

            break;

        case PageOrientation.Portrait:

            VisualStateManager.GoToElementState(this,"PortraitState", true);

            break;

       default:

            break;
    }

于 2012-10-18T10:12:40.867 に答える
1

次のことを行うことで、自分の問題の解決策を見つけることができました。

現時点では、ExtendedVisualStateManager.GotoElementState(UIElement, String, bool) を使用するとうまく機能しないことが判明したため、VisualStateManager.GotoState を使用する方法を見つける必要がありました。

LayoutRoot を UserControl にラップするだけで問題を解決しました。

<UserControl x:Name="userControl">
    <Grid x:Name="LayoutRoot" Background="Transparent">
        <VisualStateManager.VisualStateGroups>
    ...
</UserControl>

状態の切り替えは、私が最初に試みたように、VisualStateManager.GotoState を呼び出すだけの問題になりました。

    protected override void OnOrientationChanged(OrientationChangedEventArgs e)
    {
        base.OnOrientationChanged(e);

        switch (e.Orientation)
        {
            case PageOrientation.Landscape:
            case PageOrientation.LandscapeRight:
            case PageOrientation.LandscapeLeft:
                VisualStateManager.GoToState(control: userControl,
                                                        stateName: "LandscapeState", 
                                                        useTransitions: true);
                break;
            case PageOrientation.Portrait:
            case PageOrientation.PortraitUp:
            case PageOrientation.PortraitDown:
                VisualStateManager.GoToState(control: userControl,
                                                        stateName: "PortraitState", 
                                                        useTransitions: true);
                break;
            default:
                VisualStateManager.GoToState(control: userControl,
                                    stateName: "PortraitState",
                                    useTransitions: true);
                break;
        }
    }
于 2012-10-18T12:16:22.967 に答える