Когда список выпадает, мышь наводится над элементом в раскрывающемся списке, элемент становится подсвеченным, но выбранное значение, отображаемое в текстовом поле, не изменяется, если элемент щелчок. Я ищу способ изменить мышь на поведение в элементе управления, который наследуется от ComboBox. Я попытался доминирующую функцию как OnMouseEnter
& OnMouseMove
и т.д.Переопределение мыши над поведением в комбинированном поле WPF
ответ
Вы можете сделать это, переопределив OnMouseMove. Свойство OriginalSource MouseEventArgs предоставит вам элемент непосредственно под мышью. Вы можете использовать ContainerFromElement, чтобы получить ComboBoxItem, содержащие этот элемент, а затем ItemContainerGenerator.ItemFromContainer, чтобы получить элемент для выбора:
protected override void OnMouseMove(MouseEventArgs e)
{
base.OnMouseMove(e);
var container = ContainerFromElement((DependencyObject)e.OriginalSource);
if (container != null)
{
SelectedItem = ItemContainerGenerator.ItemFromContainer(container);
}
}
Вместо создать свой собственный контроль с помощью TextBlock, ToggleButton со стрелкой и ListBox. Показывать список, когда установлен флажок ToggleButton. Когда пользователь нажимает над списком элементов, меняет текст в текстовом поле и обновляет некоторое свойство для выбранного элемента или запускает событие.
Это, как я решил такую же проблему в моем коде, hopefull, что это может быть полезным для кого-то другого , или просто шаги к полному решению xaml.
Я следовал за решением Quartermeister. Но, на мой взгляд, необходимость подклассификации ComboBox - это слабость дизайна (потому что это делается только для обработки события MouseOver). Поскольку мне нужно просто для другого поведения события MouseOver, я применил только метод, который обрабатывает события MouseOver в классе, прикрепленном к файлу XAML.
Прежде всего, я использовал класс EventSetter, который подклассифицирует класс Setter и относится к событиям. Таким образом, EventSetter можно использовать для украшения FrameworkElements, как мы обычно делаем с Setter.
<ComboBox>
<ComboBox.ItemContainerStyle>
<Style TargetType="{x:Type ComboBoxItem}">
<EventSetter Event="MouseMove" Handler="_updateModel"/>
</Style>
</ComboBox.ItemContainerStyle>
</ComboBox>
Таким образом, каждый ComboBoxItem называет _updateModel при наведении указателя мыши его.
Моя реализация _updateModel довольно прямо, она основана сильно на работе Quartermeister:
private void _updateModel(object sender, MouseEventArgs e)
{
DependencyObject src = e.Source as DependencyObject;
ComboBoxItem cbi = VisualTreeHelper.GetParent(src) as ComboBoxItem;
while ((cbi == null) && (src!=null))
{
src = VisualTreeHelper.GetParent(src);
cbi = src as ComboBoxItem;
}
if (cbi != null)
{
ComboBox cb = ItemsControl.ItemsControlFromItemContainer(cbi) as ComboBox;
if (cb != null)
{
var container = cb.ContainerFromElement((DependencyObject)e.OriginalSource);
if (container != null)
{
cb.SelectedItem = cb.ItemContainerGenerator.ItemFromContainer(container);
}
}
}
}
Другие пути решения одни и те же вопросы можно использовать blend's behaviors по причинам, которые не стоит объяснять здесь, Я не мог использовать это поведение.
- 1. привязка данных в комбинированном поле wpf в сетке данных
- 2. WinForms - Отключить по умолчанию курсор мыши над поведением элемента?
- 3. Создать автоматические настраиваемые divs на основе мыши над поведением
- 4. WPF TreeView: выделите пункт мыши над
- 5. wpf ListView - отключить заголовок мыши над эффектом
- 6. WPF - сменить надпись на мыши над
- 7. с поведением #/.net текстовое поле
- 8. Переопределение тем в WPF
- 9. WPF Проблема с поведением фокуса
- 10. Изменение значения по умолчанию в комбинированном поле
- 11. Путаница над поведением Publish(). Refcount()
- 12. Переопределение подсказки в WPF
- 13. Silverlight: Переопределение курсора мыши
- 14. Confused над поведением List.mapi в F #
- 15. Изменение метки при выборе текста в комбинированном поле VB.Net
- 16. Нажимайте кнопку мыши над полем со списком в WPF
- 17. WPF отличается поведением в разных условиях?
- 18. неправильное поведение управления поведением в приложении WPF?
- 19. Переопределение управления WPF
- 20. WPF переопределение ScrollVIewer в Listbox
- 21. Переопределение абстрактных методов событий мыши
- 22. Обнаружение положения мыши над iframes
- 23. Переопределение функции над собственным выходом
- 24. Индикатор фокусировки на комбинированном поле соплителя Microsoft не отображается (иногда)
- 25. WPF Изменить EllipseGeometry RadiusX и RadiusY на мыши над
- 26. Движения мыши в wpf
- 27. Перемещение мыши в wpf
- 28. jQuery мышь над странным поведением в IE, Opera, Chrome
- 29. WPF удалить глянцевый эффект от выбора/мыши над GridView
- 30. JQuery на мыши над