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はグリッドタイプです。そして、それをタイプTabItemにキャストしようとしています。

行にブレークポイントを設定し、イベントが複数回呼び出されるかどうかを確認します。

1回だけ呼び出された場合は、回線を変更するだけで十分な場合があります

((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;

これらの1つが根本的な原因であることは間違いありません!

あなたのコードは主にイベントハンドラーです-私の推測では、これらはグリッド上で定義されています。

于 2012-12-06T22:14:30.140 に答える