防止WPF文本框显示在多行上

防止WPF文本框显示在多行上,wpf,word-wrap,Wpf,Word Wrap,我有一个WPF文本框,用于接受搜索词,并在用户点击Enter键(文本框处于焦点)时使用该搜索词 由于无法解释的原因,该文本框允许输入多行文本 我已将TextWrapping设置为NoWrap并将MaxLines设置为1。关联的事件处理程序指示它在Environment.NewLine终止文本时处理事件 除了包装外,其他一切都正常工作。如何防止文本换行 <TextBox Height="23" Margin="24,1,12,0" Name="txtSearch" VerticalAlign

我有一个WPF文本框,用于接受搜索词,并在用户点击Enter键(文本框处于焦点)时使用该搜索词

由于无法解释的原因,该文本框允许输入多行文本

我已将
TextWrapping
设置为
NoWrap
并将
MaxLines
设置为
1
。关联的事件处理程序指示它在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;
    }
}

私有void txtSearch_TextChanged(对象发送者,textchangedventargs e)
{
if(txtSearch.Text.EndsWith(Environment.NewLine))
{
string search=txtSearch.Text.Replace(Environment.NewLine,string.Empty);
e、 已处理=正确;
MainViewModel vm=(MainViewModel)this.FindResource(“viewModel”);
vm.SearchText=搜索;
}
}

你是说当你点击回车键时它会自动换行吗?或者当文本变得太长时


您有
AcceptsReturn=“True”
,这意味着用户可以使用文本框内的Enter键创建换行符。尝试将其设置为False。

设置
AcceptsReturn
为False,而不是true。将其设置为true意味着它是可接受的文本输入。

您可以使用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
    }
}

我希望enter键使搜索开始(即触发我的事件处理程序,而不是传递给表单)。但是,我想阻止该输入到达文本框。我认为通过指示事件已被处理,这将发生。当按下Enter键时,如何触发事件处理程序,但阻止输入到达文本框?@Eric J。您可以将事件连接到文本框的
PreviewKeyDown
,如果按下的键是Enter键,则可以处理搜索。