2009-05-22 3 views
3

Я пытаюсь получить событие keydown keydown, чтобы уловить событие backspace key down. У меня это работает, добавив класс, который переопределяет текстовое поле. То, что я не знаю, как это сделать, - это связаться с классом, где текстовое поле находится в пользовательском элементе управления.переопределяет текстовое поле Silverlight

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

+0

Другая вещь, которая выскакивает из-за меня об этом, заключается в том, что у вас есть два условия «если», которые имеют один и тот же код. Было бы легче прочитать, если бы вы просто положили «или» туда, чтобы код не повторялся (например, если e.Key = Key.Back OrElse e.Key = Key.Delete ... Я думаю, что так вы делаете это в VB) – Rich

+0

Вы когда-нибудь это выясняли? –

ответ

0

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

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

, вероятно, отсутствует что-то .. однако .. Мне нужно теперь указать длину текстового окна на каждом шаге, чтобы я мог сделать некоторую логику в коде позади. Можете ли вы помочь мне понять, как я могу это сделать с тем, что у вас есть выше .. если это возможно. Или то, что у вас выше, связано, и в этом примере будет отображаться последняя длина в текстовом блоке. спасибо – jvcoach23

+0

Если вы хотите выполнить работу с кодом в ответ на ввод текста, добавьте обработчик событий для события KeyUp. Там вы можете ссылаться на TextBox по имени или отправителем. txtInput.Text.Length, например. – Rich

+0

Я попробовал событие keyup в текстовом поле .. он работает для многих клавиатур .. но backspace игнорируется ... и мне нужно это поймать. Спасибо – jvcoach23

2

Вам не нужно подкласс TextBox, чтобы сделать это. Вместо этого добавьте обработчик для события TextBox.TextChanged прямо в ваш класс UserControl. Когда это вызывается, отправителем события должен быть ваш TextBox. Затем вы можете получить текст и сделать то, что вам нужно.

Update: На основе комментария, должно работать:

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

, вы бы хотели привести пример .. Я пытался сделать то, о чем вы говорите .. но я не делал это правильно, потому что текстовое поле не будет вести себя так, как в переопределении. – jvcoach23

+0

Смотрите мое обновление. Отвечает ли это на ваш вопрос? – Andy

+0

Энди .. очень жаль, что я еще не вернулся к этому .. Я посмотрел (не очень долго или тяжело), ​​и я еще не совсем там. OnTextChanged дает ошибку, что мне нужна переменная withevents. я думал, что тат обычно был в замле. Надеюсь, у вас будет интерес к продолжению моего образования. Спасибо – jvcoach23

Смежные вопросы