资源字典中的事件触发功能

本文关键字:功能 事件 字典 资源 | 更新日期: 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">