2009-05-22 75 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的其他部分。