2011-07-25 34 views
2

我有一個WPF文本框旨在接受搜索字詞,並在用戶點擊回車鍵(以TextBox爲焦點)時執行該搜索字詞的操作。防止在多行顯示WPF文本框

由於無法解釋的原因,該文本框允許輸入多行文本。

我已將TextWrapping設置爲NoWrapMaxLines1。關聯的事件處理程序指示它在Environment.NewLine終止文本時處理事件。

除了包裝,其他一切都按預期工作。我如何防止文字換行?

<TextBox Height="23" Margin="24,1,12,0" Name="txtSearch" VerticalAlignment="Top" TextWrapping="NoWrap" Visibility="Visible" MinWidth="50" LostFocus="txtSearch_LostFocus" AcceptsReturn="True" TextChanged="txtSearch_TextChanged" MaxLines="1" /> 


private void txtSearch_TextChanged(object sender, TextChangedEventArgs e) 
{ 
    if (txtSearch.Text.EndsWith(Environment.NewLine)) 
    { 
     string search = txtSearch.Text.Replace(Environment.NewLine, string.Empty); 
     e.Handled = true; 

     MainViewModel vm = (MainViewModel)this.FindResource("viewModel"); 
     vm.SearchText = search; 
    } 
} 

回答

5

你的意思是它包裝,當你按Enter鍵?或者當文本太長了?

您有AcceptsReturn="True",這意味着用戶可以使用TextBox內的Enter鍵來創建換行符。嘗試將其設置爲False。

+0

看到托馬斯發表評論。 –

+1

@Eric J.您可以將事件連接到TextBox的'PreviewKeyDown',並且如果按下的鍵是回車鍵,則您將處理搜索。 – Rachel

+0

完美,'PreviewKeyDown'是正確的事件來處理。 –

1

AcceptsReturn設置爲false,不正確。將其設置爲true意味着它是可接受的文本輸入。

+0

我想讓回車鍵開始搜索(即觸發我的事件處理程序,而不是傳遞給表單)。但是,我想阻止該輸入到達TextBox。我認爲通過表明事件得到處理,那會發生。當按下Enter鍵時如何觸發我的事件處理程序,但是阻止輸入到達TextBox? –

2

而不是使用文本改變事件時,可以使用previewkeydown或previewkeyup事件......

private void TextBox_PreviewKeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.Key == Key.Enter) 
    { 
     e.Handled = true; 
     // handle search here 
    } 
    else 
    { 
     // do some thing 
    } 
}