私はフレームを持っています。私はこのラインでページを切り替える:WPF:コンテンツのルーティングイベントを変更する方法
FrameName.Content = new PageName();
私はコードビハインドでページが変更されている、と私はXAMLでそれをやってみたい、といない時にストーリーボードを開始します。私は次のコードを試しました:
<Frame.Triggers>
<EventTrigger RoutedEvent="ContentChanged">
<BeginStoryboard Storyboard="{StaticResource storyboardName}" />
</EventTrigger>
</Frame.Triggers>
ビットを検索した後、私はその性質の組み込みルーティングイベントがないことを認識しました。最初の答えhereは
最もダイナミックなアプローチは、単にContentChangedイベントを提供し、独自の
ラベル制御を導出することであることを示唆しています。私はそれがこのようになり使用XAMLでusing System.Windows; using System.Windows.Controls; namespace ContentChangedTest { class MyFrame : Frame { public event DependencyPropertyChangedEventHandler ContentChanged; static MyFrame() { ContentProperty.OverrideMetadata(typeof(MyFrame), new FrameworkPropertyMetadata(new PropertyChangedCallback(OnContentChanged))); } private static void OnContentChanged(DependencyObject dp, DependencyPropertyChangedEventArgs e) { MyFrame frame = dp as MyFrame; if (frame.ContentChanged != null) { DependencyPropertyChangedEventArgs args = new DependencyPropertyChangedEventArgs(ContentProperty, e.OldValue, e.NewValue); frame.ContentChanged(frame, args); } } } }
:
私はこの答えのコードを実装しようとしてい
<local:MyFrame ContentChanged="MyFrame_ContentChanged" />
問題は最終的に私が作成する必要があるということですコードビハインドのイベントハンドラMyFrame_ContentChanged
。純粋なXAMLでこれを行う方法はありますか?たとえば、ContentChanged
依存関係プロパティを何らかのルーティングイベントに変換できますか?
私はWPFの新機能ですから、これは愚かな質問ではないでしょうか。しかし、深刻な答えに感謝します。 – Sipo
'EventTrigger'でそれを使用するには、' RoutedEvent'を使う必要があります。ルーテッド・イベントは依存関係プロパティーと同様に定義されます。このチュートリアルは、[How to:カスタムルーティングイベントの作成](https://msdn.microsoft.com/en-us/library/ms752288(v=vs.100).aspx)のチュートリアルです。 – Grx70
@ Grx70、\tありがとうございます。どのように動作するのかを実演してください。そして、それを上記のコードとどのように統合できますか? – Sipo