3

PrismベースのSilverlightアプリケーションを作成しており、個別のモジュールに多数のページがあります。

ページ間の遷移はナビゲーションイベントを介して処理され、各モジュールには次のメソッドが実装されており、移動時にページを表示し、移動時に非表示になります。

public void Show()
{
    VisualStateManager.GoToState(this, "ShowState", true);
}

public void Hide()
{
    VisualStateManager.GoToState(this, "HideState", true);
}

現在、「ShowState」と「HideState」は各モジュールのXAMLファイルで定義されているため、何度も複製されています。

<Grid x:Name="LayoutRoot">
    <VisualStateManager.VisualStateGroups>
        <VisualStateGroup x:Name="VisualStates">
            <VisualState x:Name="ShowState">
                ...
            </VisualState>
            <VisualState x:Name="HideState">
                ...
            </VisualState>
        </VisualStateGroup>
    </VisualStateManager.VisualStateGroups>

ここで、は各遷移...のを表します。Storyboard

定義にエラーが見つかったStoryboardので、現時点ではすべてのファイルに修正を複製する必要があります。Storyboard各ファイルで参照できる定義が1つしかない方がよいでしょう。

私は午前中ずっと正しい構文を探しましたが、これまで運がなかったのです。

VisualStateManagerこれをすべてのXAMLファイル間で共有するにはどうすればよいですか?

4

1 に答える 1

2
<Storyboard x:Key="ShowStoryboard">
    <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="glow" Storyboard.TargetProperty="(UIElement.Opacity)">
        <SplineDoubleKeyFrame KeyTime="00:00:00.3000000" Value="0"/>
    </DoubleAnimationUsingKeyFrames>
</Storyboard>

<VisualState x:Name="ShowState">
    <BeginStoryboard Storyboard="{StaticResource ShowStoryboard}"/>
</VisualState>

XAML内でストーリーボードを参照するには、上記のように実行できます。一番上の部分は、どこかにリソースとして保存されているストーリーボードです。その後、VisualState内でBeginStoryboard参照を使用できるようになります。

編集:上記はWPF内では可能と思われますが、SLでは不可能です。Storyboard現在のところ、SLで再利用する機能はないようVisualStateです。VisualStateManagerカスタムコントロールに適用されたスタイル内に動作をカプセル化することで、実行しようとしていることを引き続き達成できるはずです。これにより、探している単一障害点が提供されます。

于 2010-12-06T15:34:25.003 に答える