我有一个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;
}
}
答案 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意味着它是可接受的文本输入。