none
Texbox mit Enter Bestätigen

    Frage

  • Hallo zusammen,

    ich bin Ngankam De-Fondanti ,ganz neue in der Programierung und ich habe ein Problem.

    Ich will seit Paar Wochen erfolglos die EinganbeTaste der Tastatur mit einem Textbox binden. Das will ich mit ''Wpf Styles ,template ,Trigger oder so'' machen

    Würde mich riesig freuen wenn Sie mir helfen können

    Mit besten Grüßen

    Freitag, 29. Dezember 2017 12:38

Antworten

  • Hi Ngankam,
    Du kannst Dich an das KeyDown-Ereignis hängen und dort die Enter-Taste abfragen. Um sich an das Ereignis zu hängen, kannst Du A
    ssembly System.Windows.Interactivity nutzen. das kann dann so aussehen:

    XAML:

    <Window x:Class="Window18"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
            xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
            xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
            xmlns:local="clr-namespace:WpfApp1"
            mc:Ignorable="d"
            Title="Window18" Height="300" Width="300">
      <Window.Resources>
        <local:Window18VM x:Key="vm"/>
      </Window.Resources>
      <StackPanel DataContext="{StaticResource vm}">
        <TextBox Text="{Binding Text}">
          <i:Interaction.Behaviors>
            <local:Window18Behavior/>
          </i:Interaction.Behaviors>
        </TextBox>
        <Label Content="{Binding Info}"/>
      </StackPanel>
    </Window>
    

    Dazu die Klassen:

    Imports System.ComponentModel
    Imports System.Runtime.CompilerServices
    Imports System.Windows.Interactivity
    
    Public Class Window18VM
      Implements INotifyPropertyChanged
    
      Public Property Text As String
    
      Private _info As String = String.Empty
      Public Property Info As String
        Get
          Return Me._info
        End Get
        Set(value As String)
          If Me._info <> value Then
            Me._info = value
            OnPropertyChanged()
          End If
        End Set
      End Property
    
      Public Event PropertyChanged As PropertyChangedEventHandler Implements INotifyPropertyChanged.PropertyChanged
      Friend Sub OnPropertyChanged(<CallerMemberName> Optional propName As String = "")
        RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(propName))
      End Sub
    End Class
    
    Public Class Window18Behavior
      Inherits Behavior(Of TextBox)
    
      Protected Overrides Sub OnAttached()
        AddHandler AssociatedObject.KeyDown, AddressOf AssociatedObject_KeyDown
      End Sub
    
      Protected Overrides Sub OnDetaching()
        RemoveHandler AssociatedObject.KeyDown, AddressOf AssociatedObject_KeyDown
      End Sub
    
      Private Sub AssociatedObject_KeyDown(sender As Object, e As KeyEventArgs)
        Dim vm = TryCast(AssociatedObject.DataContext, Window18VM)
        If e.Key = Key.Enter Then
          vm.Info = "Enter gedrückt"
        Else
          vm.Info = String.Empty
        End If
      End Sub
    
    End Class


    --
    Viele Grüsse
    Peter Fleischer (ehem. MVP)
    Meine Homepage mit Tipps und Tricks

    Dienstag, 2. Januar 2018 20:46

Alle Antworten

  • Hi Ngankam,
    was soll beim Betätigen der Eingabetaste passieren?

    Es gibt in der TextBox verschiedene Ereignisse, z.B. TextChanged, LostFDocus usw.


    --
    Viele Grüsse
    Peter Fleischer (ehem. MVP)
    Meine Homepage mit Tipps und Tricks

    Freitag, 29. Dezember 2017 16:23
  • hi Peter ,

    danke für die Rückmeldung. Mein Textbox sollte den Focus verlieren -also das Eingegebene übernehmen

    und mein erstes Problem ist: wie könnte ich den Textbox erkennen lassen dass die Eingabetaste Betätig wurde??

    Dankeschön

    Dienstag, 2. Januar 2018 14:12
  • Hi Ngankam,
    Du kannst Dich an das KeyDown-Ereignis hängen und dort die Enter-Taste abfragen. Um sich an das Ereignis zu hängen, kannst Du A
    ssembly System.Windows.Interactivity nutzen. das kann dann so aussehen:

    XAML:

    <Window x:Class="Window18"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
            xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
            xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
            xmlns:local="clr-namespace:WpfApp1"
            mc:Ignorable="d"
            Title="Window18" Height="300" Width="300">
      <Window.Resources>
        <local:Window18VM x:Key="vm"/>
      </Window.Resources>
      <StackPanel DataContext="{StaticResource vm}">
        <TextBox Text="{Binding Text}">
          <i:Interaction.Behaviors>
            <local:Window18Behavior/>
          </i:Interaction.Behaviors>
        </TextBox>
        <Label Content="{Binding Info}"/>
      </StackPanel>
    </Window>
    

    Dazu die Klassen:

    Imports System.ComponentModel
    Imports System.Runtime.CompilerServices
    Imports System.Windows.Interactivity
    
    Public Class Window18VM
      Implements INotifyPropertyChanged
    
      Public Property Text As String
    
      Private _info As String = String.Empty
      Public Property Info As String
        Get
          Return Me._info
        End Get
        Set(value As String)
          If Me._info <> value Then
            Me._info = value
            OnPropertyChanged()
          End If
        End Set
      End Property
    
      Public Event PropertyChanged As PropertyChangedEventHandler Implements INotifyPropertyChanged.PropertyChanged
      Friend Sub OnPropertyChanged(<CallerMemberName> Optional propName As String = "")
        RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(propName))
      End Sub
    End Class
    
    Public Class Window18Behavior
      Inherits Behavior(Of TextBox)
    
      Protected Overrides Sub OnAttached()
        AddHandler AssociatedObject.KeyDown, AddressOf AssociatedObject_KeyDown
      End Sub
    
      Protected Overrides Sub OnDetaching()
        RemoveHandler AssociatedObject.KeyDown, AddressOf AssociatedObject_KeyDown
      End Sub
    
      Private Sub AssociatedObject_KeyDown(sender As Object, e As KeyEventArgs)
        Dim vm = TryCast(AssociatedObject.DataContext, Window18VM)
        If e.Key = Key.Enter Then
          vm.Info = "Enter gedrückt"
        Else
          vm.Info = String.Empty
        End If
      End Sub
    
    End Class


    --
    Viele Grüsse
    Peter Fleischer (ehem. MVP)
    Meine Homepage mit Tipps und Tricks

    Dienstag, 2. Januar 2018 20:46
  • Danke Sehr Peter....

    Frohes neues Jahr

    Donnerstag, 4. Januar 2018 09:46