在WP7的TextBox如果需要Click事件該怎麼做呢?

經忘了在哪邊看到相關的文章了,不過還是筆記一下;在預設TextBox上面只會有MouseLeftButtonDown這個事件可以偵測使用者是否點選,而這個事件是一點選就馬上會觸發了,如果想要Click的效果,也就是按下、放開,這樣的動作才要觸發的話,就要而外的處理一下;這類的需求是比較少見一些,不過如果需要在TextBox上實作Click的動作的話可以參考下面的方式。

已經忘了在哪邊看到相關的文章了,不過還是筆記一下;在預設TextBox上面只會有MouseLeftButtonDown這個事件可以偵測使用者是否點選,而這個事件是一點選就馬上會觸發了,如果想要Click的效果,也就是按下、放開,這樣的動作才要觸發的話,就要而外的處理一下;這類的需求是比較少見一些,不過如果需要在TextBox上實作Click的動作的話可以參考下面的方式。
首先建立一個新的類別,在這個類別中會繼承原先的TextBox,並且加上一個自訂事件

{
    public class nTextBlock : TextBox
    {
        bool isMouseDown = false;
        public delegate void deOnClick(object sender,MouseButtonEventArgs e);

        public event deOnClick OnClick;

        protected override void OnMouseLeftButtonDown(MouseButtonEventArgs e)
        {
            isMouseDown = true;
            base.OnMouseLeftButtonDown(e);
        }

        protected override void OnMouseLeftButtonUp(MouseButtonEventArgs e)
        {
            if (isMouseDown)
            {
                isMouseDown = false;
                OnClick(this,e);
            }
            else
                base.OnMouseLeftButtonUp(e);
        }
    }
}

而在主要頁面上可以用下面的方式將控制項加進來使用
 MyCtl.nTextBlock nTxt = new MyCtl.nTextBlock();
            Grid.SetRow(nTxt, 1);
            nTxt.Text = "New TextBox";
            nTxt.OnClick += new MyCtl.nTextBlock.deOnClick(nTxt_OnClick);
            ContentGrid.Children.Add(nTxt);

這邊其實就是自行宣告一個變數來判斷是不是完成Click的動作,不建立新的類別都寫在主要頁面中來處理相關的事件也是可以,不過程式碼就會變得比較不好閱讀一些;做個筆記也給大家參考看看了。