2009-05-22 133 views
3

我想要獲取文本框keydown事件來捕獲退格鍵關閉事件。我通過添加覆蓋文本框的類來工作。我不知道該怎麼做的是與文本框在用戶控件中的類進行通信。Silverlight文本框覆蓋

當用戶鍵入文本框...說abcd或退格,我需要更新usercontrol上的東西。讓我們只是說我想要顯示文本框中有多少個字符。有人可以幫助我。以下是我迄今爲止

Option Strict On 
Imports System.Text.RegularExpressions 

Partial Public Class Page 
    Inherits UserControl 

    Public Sub New() 
     InitializeComponent() 
     Dim textbox As New MyTextBox() With {.Width = 300, .Height = 100} 
     LayoutRoot.Children.Add(textbox) 
    End Sub 
End Class 

Public Class MyTextBox 
    Inherits TextBox 
    Protected Overrides Sub OnKeyDown(ByVal e As KeyEventArgs) 
     MyBase.OnKeyDown(e) 
     If e.Key = Key.Back Then 
      e.Handled = True 
      MyBase.OnKeyDown(e) 

     ElseIf e.Key = Key.Delete Then 
      e.Handled = True 
      MyBase.OnKeyDown(e) 
     End If 
    End Sub 
End Class 

感謝 香

+0

對我而言,另一件事就是你有兩個具有相同代碼的「if」條件。如果你只是在裏面放一個「or」,這樣代碼就不會重複了(比如,如果e.Key = Key.Back OrElse e.Key = Key.Delete ...我想你就是這麼做的它在VB中) – Rich 2009-05-22 17:35:22

+0

你有沒有想過這個? – 2010-01-15 16:34:26

回答

0

你也許會想錯了。由於您在Silverlight中,因此可以使用綁定表達式獲取此信息。就像一個簡單的例子,你說你想知道文本框中有多少個字符。您可以通過以下xaml實現此目的:

<TextBox x:Name="txtInput" /> 
    <TextBlock Text="{Binding ElementName=txtInput, Path=Text.Length}" /> 
+0

可能會丟失一些東西..但是..我需要現在每個關鍵筆畫上的文本框的長度,以便我可以在後面的代碼中執行一些邏輯。你能幫我理解我可以如何做到這一點嗎?如果這是可能的。或者你在上面綁定了什麼,在這個例子中將在Textblock中顯示最新的長度。謝謝 – jvcoach23 2009-05-26 13:38:12

2

您應該不需要子類TextBox來執行此操作。相反,請在UserControl類中爲TextBox.TextChanged事件添加處理程序。當這被稱爲時,事件的發件人應該是你的TextBox。然後,您可以從中獲取文本並做你需要做的事情。

更新:根據評論,下面應該工作:

Partial Public Class Page 
    Inherits UserControl 

    Private TextBox1 as TextBox 

    Public Sub New() 
     InitializeComponent() 
     TextBox1 = New TextBox() With {.Width = 300, .Height = 100} 
     LayoutRoot.Children.Add(textbox) 
    End Sub 

    Private Sub OnTextChanged(sender as Object, e as TextChangedEventArgs) Handles TextBox1.TextChanged 
     If e.Key = Key.Back Then 
      e.Handled = True 
     ElseIf e.Key = Key.Delete Then 
      e.Handled = True 
     End If 
    End Sub 
End Class 

(我VB是有點生疏,所以在事件處理程序的語法可能不完全正確)

的基本想法是在UserControlTextBox的文字變化時收到通知。這樣您可以根據需要修改UserControl的其他部分。