我有一个框架。我切换页面这一行: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