gpt4 book ai didi

c# - 资源字典中的事件触发函数

转载 作者:行者123 更新时间:2023-11-30 12:59:56 26 4
gpt4 key购买 nike

我有一个文件resdict.xaml,它是资源字典

此文件链接在我的窗口 xaml 文件 window.xaml.cs 中:

<Window.Resources>
<ResourceDictionary Source="resdict.xaml" />
<Window.Resources>

现在,在 window.xaml.cs 中我还有这个 Storyboard代码:

<Storyboard Completed="HandlingEventHandler">
....some code...
</Storyboard>

当 Storyboard被使用并完成运行时,它会触发 HandlingEventHandler()。这就是我想要的。

现在,我们将 Storyboard 代码移动到资源字典文件 resdict.xaml 中。

我仍然可以很好地使用 Storyboard ,它会做它自己的事情,它会播放动画等等,但是 HandlingEventHandler 不再被触发。这是为什么?

有没有办法在不必为字典文件创建分部类的情况下补救这种情况?

例如,如果我将 HandlingEventHandler 设置为静态,我可以做类似的事情吗:

<Storyboard Completed="{Static: Myclass.HandlingEventHandler}">

?

最佳答案

是的,您可以使用 custom attached behaviour .

这是一个如何附加已完成事件的简单示例:

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 定义中,添加使用附加行为,如下所示:

<Storyboard behaviours:StoryBoardBehaviour.AttachCompletedHandler="True">

关于c# - 资源字典中的事件触发函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23478447/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com