0

当我尝试打开屏幕时,出现以下异常:

无法将“System.Windows.Controls.Grid”类型的对象转换为“System.Windows.Controls.TabItem”类型

任何帮助将不胜感激。

partial void VouchersDetail_Created()
    {
        this.FindControl("JournalVoucher").ControlAvailable += JournalVoucher_ControlAvailable;
    }

    void JournalVoucher_ControlAvailable(object sender, ControlAvailableEventArgs e)
    {
        ((System.Windows.Controls.TabItem)e.Control).KeyUp += JournalVoucher_KeyUp;
    }

    void JournalVoucher_KeyUp(object sender, KeyEventArgs e)
    {
        if (e.Key == Key.V)
        {
            if ((Keyboard.Modifiers & ModifierKeys.Control) == ModifierKeys.Control)
            {
                var tabitem = (System.Windows.Controls.TabItem)sender;
                tabitem.IsEnabled = true;
            }
        }
    }

谢谢

4

2 回答 2

1

我的猜测是 JournalVoucher 是 Grid 类型的。而您正试图将其转换为 TabItem 类型。

在该行上放置一个断点并检查该事件是否被多次调用。

如果它只被调用一次,那么它可能足以改变线路

((System.Windows.Controls.TabItem)e.Control).KeyUp += JournalVoucher_KeyUp;

至:

((System.Windows.Controls.Grid)e.Control).KeyUp += JournalVoucher_KeyUp;

JournalVoucher_KeyUp 中的 Sender 很可能也是 Grid 类型

于 2012-12-06T22:34:04.810 回答
0

您的代码中有许多行尝试将对象强制转换为 TabItem:

var tabitem = (System.Windows.Controls.TabItem)sender;

其中之一无疑将是根本原因!

您的代码主要是事件处理程序 - 我的猜测是这些是在网格上定义的。

于 2012-12-06T22:14:30.140 回答