资源字典中的事件触发功能
本文关键字:功能 事件 字典 资源 | 更新日期: 2023-09-27 18:01:42
我有一个文件索引。Xaml是资源字典
这个文件链接到我的窗口xaml文件window.xaml.cs:
<Window.Resources>
<ResourceDictionary Source="resdict.xaml" />
<Window.Resources>
现在,在window.xaml.cs中,我还为故事板添加了以下代码:
<Storyboard Completed="HandlingEventHandler">
....some code...
</Storyboard>
当故事板被使用并完成它的运行时,它会触发HandlingEventHandler()。这就是我想要的。
现在,我们将故事板代码移动到资源字典文件resdict.xaml.
我仍然可以使用故事板,它做它的事情,它播放动画等等,但是HandlingEventHandler不再被触发。为什么呢?
是否有一些方法来补救这种情况,而不必为字典文件创建部分类?
例如,如果我使HandlingEventHandler静态,我可以这样做:
<Storyboard Completed="{Static: Myclass.HandlingEventHandler}">
?
可以,您可以使用自定义附加行为。
下面是一个简单的例子,说明如何附加完成的事件:
public class StoryBoardBehaviour : DependencyObject
{
public static readonly DependencyProperty AttachCompletedHandlerProperty =
DependencyProperty.Register("AttachCompletedHandler", typeof(bool), typeof(StoryBoardBehaviour), new PropertyMetadata(false, AttachCompletedHandlerChanged));
public static void SetAttachCompletedHandler(DependencyObject obj, bool value)
{
obj.SetValue(AttachCompletedHandlerProperty, value);
}
public static bool GetAttachCompletedHandler(DependencyObject obj)
{
return (bool)obj.GetValue(AttachCompletedHandlerProperty);
}
private static void AttachCompletedHandlerChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var storyboard = (Storyboard)d;
var oldValue = (bool)e.OldValue;
var newValue = (bool)e.NewValue;
if (newValue && !oldValue)
{
storyboard.Completed += StoryboardOnCompleted;
}
if (!newValue && oldValue)
{
storyboard.Completed -= StoryboardOnCompleted;
}
}
private static void StoryboardOnCompleted(object sender, object o)
{
// Completed handler logic
}
}
然后在你的资源字典中的故事板定义中,添加使用附加的行为如下:
<Storyboard behaviours:StoryBoardBehaviour.AttachCompletedHandler="True">