0

次のコードでは、テキストブロックである子の名前またはテキストをクリックした境界線を取得しようとしていました。私の問題は、「eaclick.Handled = true;」がないことです。コードでは、「eaclick.Handled = true;」を追加してクリックされたものだけでなく、マウスがクリックする前に入力した境界線のすべての名前を表示し始めます。マウスが入力した最初の境界線をすべて表示します。すべてのマウス入力がスタックに保存されているように見えます。左マウスダウンをクリックすると、最後のマウス入力を取得する代わりにそのスタックが取得されます。修正または私が間違っていることは何ですか?

for (int i = 0; i < NumPages; i++)
{

    Border borderaux = new Border();
    borderaux.Name = Convert.ToString(i);
    //borderaux.MouseEnter += borderaux_MouseEnter;
    Border clicked;
    borderaux.MouseEnter += (smouse, eamouse) =>
    {
        clicked = (Border)smouse;
        clicked.Cursor = Cursors.Hand;

        MouseLeftButtonDown += (sclick, eaclick) =>
        {
            if (eaclick.ClickCount == 1)
            {
                TextBlock opcao = (TextBlock)(clicked).Child;

                //string opcao="";
                MessageBox.Show("Pressed-->" + opcao.Text);
                //MessageBox.Show("Pressed-->" + clicked.Name);
                eaclick.Handled = true;
            }
        };
4

1 に答える 1

0

問題は、問題を発生させていた MouseEnter イベント内で MouseLeftButtonDown イベントを使用することでした。クリックすると、クリックするまでマウスがホバリングしたすべての境界線の数を示す x MessageBox が表示され、修正すると、境界線が表示されます。実際にクリックされました。

    for (int i = 0; i < NumPages; i++)
    {

        Border borderaux = new Border();
        borderaux.Name = Convert.ToString(i);
        //borderaux.MouseEnter += borderaux_MouseEnter;
        Border clicked;
        borderaux.MouseLeftButtonDown += (sclick, eaclick) =>
        {

            if (eaclick.ClickCount == 1)
            {
                TextBlock opcao = (TextBlock)((Border)sclick).Child;

                //string opcao="";
                MessageBox.Show("Pressed-->" + opcao.Text);
                //eaclick.Handled = true;
            }
        };

        borderaux.MouseEnter += (smouse, eamouse) =>
        {
            clicked = (Border)smouse;
            clicked.Cursor = Cursors.Hand;

        };
于 2014-04-16T10:33:05.780 に答える