2013-10-04 2 views
2

WPF 응용 프로그램에서 키를 입력 할 때마다 텍스트 상자의 내용을 가져 오려고합니다. 그러나 KeyPress에 대한 옵션이 없습니다. KeyDown 이벤트를 사용했습니다. 모든 키 누르기에 대한 코드 뒤에 있습니다. 효율적인 대안이 있습니까? 여기에 대신 직접 텍스트 상자 퍼팅의 Keypress 이벤트가 눌려진 키를 확인합니다

private void txt_chat_KeyDown_1(object sender, KeyEventArgs e) 
{ 
    if (e.Key == Key.Return) 
    { 
    txt_conversation.AppendText(Environment.NewLine+txt_chat.Text); 
    } 
    else { return; } 
} 

내 XAML

<RichTextBox IsReadOnly="True" 
      ScrollViewer.VerticalScrollBarVisibility="Auto" 
      x:Name="txt_conversation" 
      HorizontalAlignment="Left" 
      Height="150" 
      Margin="21,21,0,0" 
      VerticalAlignment="Top" 
      Width="269"> 
    <FlowDocument> 
    <Paragraph> 
     <Run Text="RichTextBox" /> 
    </Paragraph> 
    </FlowDocument> 
</RichTextBox> 
<TextBox ScrollViewer.VerticalScrollBarVisibility="Auto" 
     KeyDown="txt_chat_KeyDown_1" 
     x:Name="txt_chat" 
     HorizontalAlignment="Left" 
     Height="84" 
     Margin="51,190,0,0" 
     VerticalAlignment="Top" 
     Width="209"> 
</TextBox> 
+0

확인이 : http://msdn.microsoft.com/en-us/library/ms752054.aspx – JohnLBevan

+0

나는 same.My 질문 난 내 코드 숨김에서 중단 점을 때 실제로 동안 그 관찰하고 한 각 키를 누르면 컨트롤이 서버 페이지로 이동하고 프로세스가 실행됩니다. 어떻게하면이 @@@ 서버 페이지 – Suresh

+1

을 막을 수 있습니까? - 네가 무슨 말하는지 모르겠다. ViewModel의 Command에 대해 InputBinding이 필요합니다. 코드에서 절차 적으로 처리하는 것이 아닙니다. –

답변

0

, 당신은 텍스트 상자 등의 Template 세트 버튼을 가질 수 있습니다. 여기서 Button은 IsDefault으로 설정됩니다. 즉, Enter 키를 누를 때마다 클릭 이벤트가 발생하고 TextBox AcceptReturn이 False로 설정되어 있기 때문에 Textbox에 포커스가있을 때 Enter 키를 누를 때마다 부모 버튼 클릭 이벤트가 발생합니다.

<Button x:Name="myButton" IsDefault="True" Click="Button_Click"> 
     <Button.Template> 
      <ControlTemplate> 
       <TextBox AcceptsReturn="False" Text="{Binding Tag, RelativeSource={RelativeSource Mode=TemplatedParent}, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/> 
      </ControlTemplate> 
     </Button.Template> 
    </Button> 

를 누른 경우에만 Enter 키를 이런 식으로 는 이벤트가 해고되고 클릭 처리기에서 당신은 TextBox.Text가 결합 된 버튼 Tag에서 텍스트 값을 얻을 수 있습니다.

 private void Button_Click(object sender, RoutedEventArgs e) 
    { 
     string text = myButton.Tag.ToString(); 
     txt_conversation.AppendText(Environment.NewLine+text); 
    } 
+0

버튼 컨트롤 템플릿을 사용하는 것은 정말 영리한 방법입니다. 그것은 약간의 해킹을 느낀다. 특히 버튼이 디폴트가 될 필요가있다. – Daniel

+0

그냥 문제에 가장 적합한 솔루션을 주었다 ... 그렇지 않으면 mvvm을 구현하여 문제를 해결해야하며 명령과 바인딩을 사용하여이 작업을 수행한다. – Nitin

+0

더 나은 해결책을 찾았습니까? – Nitin

관련 문제