3

VS 2013 と MVVM Light を使用して Windows 8.1 アプリを開発しています。

次のコードは、アプリバー内のフライアウトでの動作を示しています。

<AppBarButton.Flyout>
    <Flyout x:Name="FlyoutCalculator"
            Placement="Top"
            FlyoutPresenterStyle="{StaticResource FlyoutPresenterBaseStyle}">

        <uc:Calculator ApplyCommand="{Binding CancelCommand}"
                       CancelCommand="{Binding CancelCommand}"                                           
                       Available="{Binding AvailableCounter, Mode=OneWay}"
                       SelectedItem="{Binding SelectedItem, Mode=TwoWay}"/>
        <interactivity:Interaction.Behaviors>
            <core:EventTriggerBehavior EventName="Opening">
                <core:InvokeCommandAction Command="{Binding ShowCurrentCostsCommand}" />
            </core:EventTriggerBehavior>
        </interactivity:Interaction.Behaviors>
    </Flyout>
</AppBarButton.Flyout>

残念ながら、アプリのコンパイル中に例外が発生します。

WinRT-Informationen: 型のインスタンスを型Microsoft.Xaml.Interactions.Core.EventTriggerBehaviorのコレクションに追加できませんMicrosoft.Xaml.Interactivity.BehaviorCollection

ビューの他の動作は機能しますが、誰かがこれに対する解決策を知っていますか?

4

2 に答える 2

1

解決策はありませんが、Windows 8.1 アプリでフライアウトを使用していません。あなたが行ったEventTriggerBehaviorように、追加した UserControl を使用しています。そして、実行時に VisualStudio からまったく同じエラー メッセージが表示されます。私はこれを使用しているRoutedEventHandlerため、使用すると問題が発生する可能性があります

EventHandler<object> Opening

行動のトリガーとして。しかし、それは問題が何であるかの単なる考えです。

私にとって、私は答えを見つけました:

my の Type をRoutedEventHandler通常の に変更しましたEventHandler。をトリガーするCodeBehind 内の MethodRoutedEventHandlerは、送信者のみで呼び出されます。RoutedEventArgsEventArgs

また、Flyout コントロールを使用して UserControl を作成し、それを使用するページに対して Opening Event を公開することで、回避策を作成することもできます。EventTriggerBehavior次に、を UserControl に追加してカスタムOpeningイベントに接続すると、期待どおりの動作が得られます。

于 2013-12-17T15:51:48.970 に答える