C# WPF:如何为更改的内容创建路由事件?
我有一个框架。我用此行切换页面:C# WPF:如何为更改的内容创建路由事件?,c#,wpf,xaml,eventtrigger,routed-events,C#,Wpf,Xaml,Eventtrigger,Routed Events,我有一个框架。我用此行切换页面: FrameName.Content = new PageName(); 我想要一个故事板在页面更改时开始,我想要用XAML,而不是代码隐藏。我尝试了以下代码: <Frame.Triggers> <EventTrigger RoutedEvent="ContentChanged"> <BeginStoryboard Storyboard="{StaticResource storyboardName}" /&
FrameName.Content = new PageName();
我想要一个故事板在页面更改时开始,我想要用XAML,而不是代码隐藏。我尝试了以下代码:
<Frame.Triggers>
<EventTrigger RoutedEvent="ContentChanged">
<BeginStoryboard Storyboard="{StaticResource storyboardName}" />
</EventTrigger>
</Frame.Triggers>
在XAML中,我使用的是如下所示:
<local:MyFrame ContentChanged="MyFrame_ContentChanged" />
问题是,最终我需要在代码隐藏中创建一个事件处理程序
MyFrame\u ContentChanged
。有没有办法在纯XAML中实现这一点?例如-我是否可以将ContentChanged
依赖项属性转换为某种路由事件?要将事件与EventTriggers
一起使用,它们应该是路由事件。路由事件的定义方式类似于依赖项属性。这里有一个关于如何开始的快速教程:
下面是一个从定义ContentChanged
事件的ContentControl
派生的类的示例:
public class MyContentControl : ContentControl
{
public static readonly RoutedEvent ContentChangedEvent
= EventManager.RegisterRoutedEvent(
"ContentChanged",
RoutingStrategy.Bubble,
typeof(RoutedEventHandler),
typeof(MyContentControl));
public event RoutedEventHandler ContentChanged
{
add { AddHandler(ContentChangedEvent, value); }
remove { RemoveHandler(ContentChangedEvent, value); }
}
protected override void OnContentChanged(object oldContent, object newContent)
{
base.OnContentChanged(oldContent, newContent);
RaiseEvent(new RoutedEventArgs(ContentChangedEvent, this));
}
}
我还不知道为什么,但在测试时,这行代码在样式中工作,但在控件的触发器集合中直接使用时引发了异常:
<EventTrigger RoutedEvent="ContentChanged">...</EventTrigger>
。。。
为了在这种情况下工作,我必须指定一个完全限定的事件路径:
<EventTrigger RoutedEvent="local:MyContentControl.ContentChanged">...</EventTrigger>
。。。
我对WPF非常陌生,所以这很可能是一个愚蠢的问题。不过,如果能给我一个严肃的回答,我将不胜感激。为了在EventTrigger
中使用它,您需要使用RoutedEvent
。路由事件的定义类似于依赖项属性。本教程是您的一个良好起点:。@Grx70,谢谢。您能演示一下它是如何工作的吗?我如何将其与上面的代码集成在一起?
<EventTrigger RoutedEvent="local:MyContentControl.ContentChanged">...</EventTrigger>