經忘了在哪邊看到相關的文章了,不過還是筆記一下;在預設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的動作,不建立新的類別都寫在主要頁面中來處理相關的事件也是可以,不過程式碼就會變得比較不好閱讀一些;做個筆記也給大家參考看看了。