我有一個框架。我切換頁面這一行:WPF:如何爲內容更改創建路由事件?
FrameName.Content = new PageName();
我希望在頁面改變了故事板開始,我想這樣做在XAML,而不是在代碼隱藏。我曾嘗試下面的代碼:
<Frame.Triggers>
<EventTrigger RoutedEvent="ContentChanged">
<BeginStoryboard Storyboard="{StaticResource storyboardName}" />
</EventTrigger>
</Frame.Triggers>
搜索了一下,我意識到有後沒有內置這種性質的路由事件。第一個答案here表明
最具活力的方法是簡單地推導出自己的
標籤控制,提供了一個ContentChanged事件。
我試圖實現這個答案代碼:
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);
}
}
}
}
在XAML我用它看起來像這樣:
<local:MyFrame ContentChanged="MyFrame_ContentChanged" />
的問題是,最終我需要創建一個事件處理程序MyFrame_ContentChanged
在代碼隱藏中。有沒有辦法在純XAML中做到這一點?例如 - 我可以將ContentChanged
依賴項屬性轉換爲某種路由事件嗎?
我對WPF很新,所以這很可能是一個愚蠢的問題。不過,我會很感激一個認真的答覆。 – Sipo
爲了在'EventTrigger'中使用它,你需要使用'RoutedEvent'。路由事件的定義與依賴屬性類似。對你來說一個好的起點是本教程:[如何創建自定義路由事件](https://msdn.microsoft.com/en-us/library/ms752288(v = vs.100).aspx)。 – Grx70
@ Grx70,\t謝謝。你能否證明它的工作原理,以及如何將它與上面的代碼結合起來? – Sipo