Текстовое поле Silverlight переопределяет - PullRequest
3 голосов
/ 22 мая 2009

Я пытаюсь получить событие нажатия клавиши текстового поля, чтобы перехватить событие нажатия клавиши возврата. У меня это работает, добавив класс, который переопределяет текстовое поле. Чего я не знаю, как это сделать, так это связываться с классом, где текстовое поле находится в пользовательском элементе управления.

Когда пользователь вводит текстовое поле ... скажем, abcd или backspace, мне нужно что-то обновить в 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

спасибо Shannon

Ответы [ 2 ]

2 голосов
/ 22 мая 2009

Вам не нужно создавать подкласс TextBox, чтобы сделать это. Вместо этого добавьте обработчик для события TextBox.TextChanged прямо в вашем классе UserControl. Когда это вызывается, отправитель события должен быть вашим 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 немного ржавый, поэтому синтаксис обработчика событий может быть не совсем правильным.)

Основная идея заключается в том, чтобы получать уведомления при изменении текста в TextBox внутри вашего UserControl. Таким образом, вы можете при необходимости изменить другие части UserControl.

0 голосов
/ 22 мая 2009

Возможно, вы думаете не так. Поскольку вы находитесь в Silverlight, вы можете получить эту информацию с помощью обязательных выражений. В качестве простого примера вы сказали, что хотите знать, сколько символов в текстовом поле. Вы можете достичь этого с помощью следующего xaml:

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