防止WPF TextBox显示在多行上

时间:2011-07-25 16:11:32

标签: wpf textwrapping

我有一个WPF TextBox,用于接受一个搜索词,当用户点击Enter键时(以TextBox为中心),用该搜索词做一些事情。

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

我已将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;
    }
}

3 个答案:

答案 0 :(得分:6)

你的意思是当你按Enter键时它会包裹吗?或者当文本太长时?

您有AcceptsReturn="True",这意味着用户可以使用TextBox中的Enter键创建换行符。请尝试将其设置为False。

答案 1 :(得分: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
    }
}

答案 2 :(得分:1)

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