在WPF XAML事件中为空“发件人”

时间:2012-09-13 18:26:23

标签: wpf xaml event-handling

我在这里读到Sender永远不应该在事件处理程序中为空(Konrad Rudolph对“Best way to handle a NULL”的回答。

但是,我的事件处理程序从WPF XAML获取一个空发送者。

这是XAML:

<Storyboard x:Name="Storyboard"  CurrentTimeInvalidated="StoryboardChanged">

在主窗口中,这是事件handerl:

private void StoryboardChanged(object sender, EventArgs e)
{
        try
        {
            #region VerifyInputs

            Validator.Verify(sender); <------------------- aborts on null

所以,我的问题是:我应该如何修复我的XAML,以便WPF发送非空的“发件人”值?

编辑:使用我对Validator.Verify的轻率复制/粘贴来弥补问题的应用。此方法只检查参数是否为null:

    public static void Verify(Object theObj)
    {
        if (theObj == null)
        {
            string errMsg = "theObj is null";
            Debug.Assert(theObj != null, errMsg);
            throw new ApplicationException(errMsg);
        }
    }

修改

中止,中止,中止

对不起。发件人不是空的,e是

:(

1 个答案:

答案 0 :(得分:1)

我认为问题可能是您的Validator类期望发件人所期望的。对于CurrentTimeInvalidated事件处理程序,“sender”不是Storyboard,它将是System.Media.Animation.Clock。如果验证器验证方法需要其他内容,则会将其视为#null。

(即,如果签名类似于Verify(对象发送者),并且您的实现执行类似“sender as Storyboard”的操作,则最终将返回null值。)