Silverlight文本框覆盖

时间:2009-05-22 17:19:10

标签: silverlight keydown

我正在尝试获取文本框keydown事件以捕获退格键按下事件。我有这个工作,添加一个覆盖文本框的类。我不知道该怎么做才能与文本框在用户控件中的类进行通信。

当用户输入文本框...说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

感谢 香农

2 个答案:

答案 0 :(得分: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有点生疏,因此事件处理程序语法可能不完全正确。)

基本想法是在TextBoxUserControl内的文字发生变化时收到通知。这样,您可以根据需要修改UserControl的其他部分。

答案 1 :(得分:0)

你可能会想错路。由于您使用的是Silverlight,因此可以使用绑定表达式获取此信息。就像一个简单的例子,你说你想知道文本框中有多少个字符。您可以使用以下xaml实现此目的:

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