TextBox에서 Enter 키
WPF 뷰에서는 다음과 같이 Enter 키에 이벤트를 연결하려고 합니다.
<TextBox Width="240" VerticalAlignment="Center" Margin="2" Text="{Binding SearchCriteria, Mode=OneWayToSource}">
<TextBox.InputBindings>
<KeyBinding Key="Enter" Command="{Binding EnterKeyCommand}"/>
<KeyBinding Key="Tab" Command="{Binding TabKeyCommand}"/>
</TextBox.InputBindings>
</TextBox>
이 코드는 작동하며 사용자가 Enter 키를 누르면 EnterKeyCommand가 실행됩니다.단, 문제는 이벤트가 발생했을 때 WPF가 텍스트 상자의 텍스트를 아직 SearchCriteria에 바인딩하지 않았다는 것입니다.그래서 제 이벤트가 시작되면 'SearchCriteria'의 내용이 공백이 됩니다.EnterKey 명령이 실행되었을 때 텍스트 상자의 내용을 가져올 수 있도록 이 코드를 간단하게 변경할 수 있습니까?
를 변경해야 합니다.UpdateSourceTrigger
에TextBox.Text
에 구속력이 있는.PropertyChanged
여기 보세요.
TextBox를 전달하여 이 작업을 수행할 수 있습니다.InputBindings
로서의 재산CommandParameter
에게Command
:
<TextBox x:Name="MyTextBox">
<TextBox.InputBindings>
<KeyBinding Key="Return"
Command="{Binding MyCommand}"
CommandParameter="{Binding ElementName=MyTextBox, Path=Text}"/>
</TextBox.InputBindings>
</TextBox>
6년 전의 문제인 것은 알지만 XAML을 사용하여 모든 정답을 얻을 수 있는 정답은 없으며 코드 이면도 없습니다.나는 아직 할 일이 좀 있었다.참고로 접근법은 다음과 같다.우선 XAML
<TextBox Text="{Binding SearchText, Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}">
<TextBox.InputBindings>
<KeyBinding Key="Enter" Command="{Binding SearchEnterHit}"/>
<KeyBinding Key="Return" Command="{Binding SearchEnterHit}"/>
</TextBox.InputBindings>
</TextBox>
기본적으로 모든 키를 누를 때마다 바인딩된 SearchText에 모든 키가 던져집니다.따라서 반환/ 입력을 누르면 문자열이 SearchText 내에 완전히 표시됩니다.따라서 SearchEnter에서Hit 명령어는 SearchText 속성을 통해 TextBox 내의 전체 문자열을 사용할 수 있습니다.
위에서 설명한 바와 같이 UpdateSourceTrigger=SublishChanged는 모든 키 스트로크를 SearchText 속성에 플러시합니다.KeyBindings는 Enter 키를 캡처합니다.
이것은 코드 배후에 없고 모든 XAML을 사용하지 않는 가장 간단한 방법입니다. 물론 SearchText 속성에 키를 자주 플러시하지만 일반적으로는 문제가 되지 않습니다.
이 조작은, 이면의 코드로 실시할 수도 있습니다.
입력/반환 확인에서 이벤트 핸들러 코드를 호출하기만 하면 됩니다.
비동기 이벤트처럼 실행할 수도 있습니다.여기 예가 있습니다.
tbUsername.KeyDown += async (s, e) => await OnKeyDownHandler(s, e);
private async Task OnKeyDownHandler(object sender, KeyEventArgs e)
{
if (e.Key == Key.Return)
{
if (!string.IsNullOrEmpty(tbUsername.Text) && !string.IsNullOrEmpty(tbPassword.Password))
{
Overlay.Visibility = Visibility.Visible;
await Login();
}
}
}
언급URL : https://stackoverflow.com/questions/5556489/capturing-the-enter-key-in-a-textbox
'programing' 카테고리의 다른 글
셸 스크립트 - 변수에서 첫 번째와 마지막 따옴표(")를 제거합니다. (0) | 2023.04.17 |
---|---|
프로젝트별로 Git 구성을 다르게 할 수 있나요? (0) | 2023.04.17 |
Swift의 if 스테이트먼트 내에서 여러 개의 let-as 사용 (0) | 2023.04.17 |
'on error goto 0'과 'on error goto - 1'의 차이 -- VBA (0) | 2023.04.12 |
OS X Lion에서 단말기가 로드되지 않는 문제를 수정하는 방법 ~/.bashrc (0) | 2023.04.12 |