我遇到问题ComboBox
选择第一个输入的字符,然后导致第二个输入的字符覆盖第一个字符的问题。
编辑:我试图做的一个小解释。
我已将ComboBox
设置为自动完成控件。当我输入一个字符时,我使用CollectionView
类来过滤与每个输入字符匹配的任何名称。在输入文本后,ComboBox
下拉菜单需要打开,这就是我绑定到IsDropDownOpen
的原因。 This is how it is supposed to look here.
这超出了我的范围,我无法研究如何阻止这种行为。
以下是我的意思的截屏。
这是ComboBox XAML:
<ComboBox Style="{StaticResource ComboBoxToggleHidden}"
DisplayMemberPath="FullName" SelectedValuePath="Key"
IsTextSearchEnabled="False"
IsEditable="True"
StaysOpenOnEdit="True"
Text="{Binding Path=EnteredText, UpdateSourceTrigger=PropertyChanged}"
ItemsSource="{Binding Path=Employees}"
SelectedItem="{Binding UpdateSourceTrigger=PropertyChanged, Path=SelectedEmployee}"
IsDropDownOpen="{Binding IsDropDown}">
</ComboBox>
编辑:我已将其缩小到这个,IsDropDown = true;
,评论此问题解决了这个问题。但是在编辑ComboBox
在EnteredText
属性
private string _enteredText;
public string EnteredText
{
get { return _enteredText; }
set
{
_enteredText = value;
Filter(value);
IsDropDown = true;
OnPropertyChanged();
}
}
public bool IsDropDown { get; set; }
答案 0 :(得分:1)
好的,我解决了这个问题,但是我必须要做,直到我弄清楚为什么会发生这种行为。
我在构造函数中创建了一个KeyUpEvent
事件,
EventManager.RegisterClassHandler(typeof(TextBox), TextBox.KeyUpEvent,
new RoutedEventHandler(DeselectText));
然后在Handler
我刚取消选择了文字。
private void DeselectText(object sender, RoutedEventArgs e)
{
var textBox = e.OriginalSource as TextBox;
if (textBox == null) return;
if (textBox.Text.Length >= 2) return;
textBox.SelectionLength = 0;
textBox.SelectionStart = 1;
}
我知道这是一个黑客,但在找到正确的解决方案之前别无选择。