【发布时间】:2016-04-03 10:37:33
【问题描述】:
我有一个框架。我用这一行切换页面:
FrameName.Content = new PageName();
我希望在页面发生更改时开始创建情节提要,并且我希望在 XAML 中而不是在代码隐藏中进行。我试过以下代码:
<Frame.Triggers>
<EventTrigger RoutedEvent="ContentChanged">
<BeginStoryboard Storyboard="{StaticResource storyboardName}" />
</EventTrigger>
</Frame.Triggers>
经过一番搜索,我意识到没有这种性质的内置路由事件。第一个答案here 表明
最动态的方法是简单地派生您自己的
label控件,该控件提供 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 很陌生,所以这很可能是一个愚蠢的问题。但是,我将不胜感激。
-
为了在
EventTrigger中使用它,您需要使用RoutedEvent。路由事件的定义与依赖属性类似。本教程是一个很好的起点:How to: Create a Custom Routed Event. -
@Grx70,谢谢。您能否演示一下它是如何工作的以及如何将其与上面的代码集成?
标签: c# wpf xaml eventtrigger routed-events