Есть ли способ я могу реализовать Click
на ListBoxItem
? Существует MouseLeftButtonUp
но на самом деле не то же самое, я могу мышь вниз в другом месте и перетащить в другое ListBoxItem
и он все еще работает, незначительные проблемы Тхо, это может быть странно для пользователей ТхоКак я могу получить событие Click на ListBoxItem?
ответ
Вы могли бы сделать новый ControlTemplate для ListBoxItem с чем-то clickable как корневой элемент (например, кнопка), обрабатывать событие click на этом и размещать ContentPresenter внутри «clickable»?
Я думаю, это 1 решение, я просто подожду, чтобы увидеть, есть ли другие решения, иначе это будет отмечено как ответ –
Я удалил этот ответ, потому что понял, что это путь к этой простой задаче, но потом я подумал, что все равно отправлю его, если кто-то захочет узнать, как подклассировать ListBoxItem по любой причине.
Чтобы действительно получить событие Click из списка ListBoxItem, вам нужно будет сделать следующее. Первый подкласс ListBoxItem и проверьте MouseEnter, MouseLeave, MouseUp, MouseDown, чтобы узнать, когда его запускать.
public class ClickableListBoxItem : ListBoxItem
{
// Register the routed event
public static readonly RoutedEvent ClickEvent =
EventManager.RegisterRoutedEvent("Click", RoutingStrategy.Bubble,
typeof(RoutedEventHandler), typeof(ClickableListBoxItem));
// .NET wrapper
public event RoutedEventHandler Click
{
add
{
AddHandler(ClickEvent, value);
}
remove
{
RemoveHandler(ClickEvent, value);
}
}
protected void OnClick()
{
RaiseEvent(new RoutedEventArgs(ClickEvent));
}
private bool m_isClickable = false;
private bool m_click = false;
protected override void OnMouseEnter(System.Windows.Input.MouseEventArgs e)
{
m_isClickable = true;
base.OnMouseEnter(e);
}
protected override void OnMouseLeave(System.Windows.Input.MouseEventArgs e)
{
m_isClickable = false;
base.OnMouseLeave(e);
}
protected override void OnPreviewMouseLeftButtonUp(System.Windows.Input.MouseButtonEventArgs e)
{
if (m_click == true)
{
OnClick();
}
base.OnPreviewMouseLeftButtonUp(e);
}
protected override void OnPreviewMouseLeftButtonDown(System.Windows.Input.MouseButtonEventArgs e)
{
if (m_isClickable == true)
{
m_click = true;
}
base.OnPreviewMouseLeftButtonDown(e);
}
}
Чтобы получить ListBox использовать ClickableListBoxItem вместо ListBoxItem мы должны также подкласс ListBox и переопределить GetContainerForItemOverride.
public class ClickableListBox : ListBox
{
protected override DependencyObject GetContainerForItemOverride()
{
//Use our own ListBoxItem
return new ClickableListBoxItem();
}
}
Затем мы можем использовать этот ClickableListBox в Xaml и получить событие Click таким образом. Это не будет работать, не Mather, что вы положили в ItemTemplate, кнопки, TextBoxes, TextBlocks и т.д.
<local:ClickableListBox x:Name="c_listBox">
<local:ClickableListBox.ItemContainerStyle>
<Style TargetType="{x:Type local:ClickableListBoxItem}">
<EventSetter Event="Click" Handler="ListBoxItem_Click"/>
</Style>
</local:ClickableListBox.ItemContainerStyle>
</local:ClickableListBox>
Простейшее решение было бы просто подкласс родительского контейнера в ItemTemplate для ListBoxItem и использовать одни и те же процедуры, мыши.
- 1. Как я могу получить событие click
- 2. Как я могу программно вызывать событие click?
- 3. Как я могу вызвать событие JavaScript click
- 4. Как я могу получить событие click в веб-узле branch.io?
- 5. Как я могу поместить событие click внутри jquery события click?
- 6. Получить событие Click на setOnTouchListener
- 7. Как я могу выполнить событие click на счетчике Progress?
- 8. Как я могу обработать событие click на кнопках внизу панели?
- 9. Как я могу изменить наведение на событие click?
- 10. Как получить предыдущий div на событие click?
- 11. Как я могу получить ListViewControl на GridViewColumnHeader Click Event
- 12. Как я могу получить Index из listboxitem по его содержимому?
- 13. Как я могу получить контроль над ControlTemplate из ListBoxItem?
- 14. Как я могу привязать к индексу ListBoxItem
- 15. Как я могу добавить ListBoxItem программно?
- 16. Как я могу получить цель Click?
- 17. JQuery: Как я могу вызвать событие click из события фокуса?
- 18. Событие Click на (Контекст) MenuItem ListBox (XamlParseException)
- 19. Как я могу имитировать событие click через скрипт?
- 20. Как я могу отладить, почему событие click удаляется из кнопки?
- 21. Как я могу вызвать событие ajax click из загрузки страницы?
- 22. Как я могу вызвать событие click невидимого элемента управления?
- 23. Как я могу делегировать событие click в угловом?
- 24. Получить элемент, содержащий событие Click
- 25. Как получить событие click внутри расширения Google?
- 26. Как я могу получить Jquery игнорировать родителей на .click()
- 27. Как я могу вызвать событие click из другого класса?
- 28. Как получить событие click из заголовка GridViewColumn?
- 29. Как я могу вызвать событие click при перетаскивании события
- 30. Угловая 2 Как я могу добавить событие click внутри внутри?
Это ответ на этот вопрос: http://stackoverflow.com/a/821609/58768 –