Я нашел решение вашей проблемы.
Проблема в том, что когда у вас есть элемент управления в элементе списка, и элемент управления щелкается (например, для ввода текста или изменения значения комбинированного списка), ListBoxItem не выбирается.
это должно сделать работу:
public class FocusableListBox : ListBox
{
protected override bool IsItemItsOwnContainerOverride(object item)
{
return (item is FocusableListBoxItem);
}
protected override System.Windows.DependencyObject GetContainerForItemOverride()
{
return new FocusableListBoxItem();
}
}
-> Используйте этот FocusableListBox вместо стандартного ListBox WPF.
И используйте этот ListBoxItem:
public class FocusableListBoxItem : ListBoxItem
{
public FocusableListBoxItem()
{
GotFocus += new RoutedEventHandler(FocusableListBoxItem_GotFocus);
}
void FocusableListBoxItem_GotFocus(object sender, RoutedEventArgs e)
{
object obj = ParentListBox.ItemContainerGenerator.ItemFromContainer(this);
ParentListBox.SelectedItem = obj;
}
private ListBox ParentListBox
{
get
{
return (ItemsControl.ItemsControlFromItemContainer(this) as ListBox);
}
}
}
A Treeview
также имеет эту проблему, но это решение не работает для Treeview
, потому что SelectedItem
из Treeview
равно readonly
.
Так что, если вы можете помочь мне с Treeview, пожалуйста; -)