WPF - Как запустить событие MouseLeftButtonUp для ComboBox? - PullRequest
0 голосов
/ 12 февраля 2019

У меня есть ComboBox, который должен вызывать функцию, которой требуется selectedItem из ComboBox в качестве параметра, когда пользователь выбирает элемент.Поскольку это событие нужно запускать, даже если элемент не изменяется, я не могу использовать событие SelectionChanged.Поэтому для решения этой проблемы я хотел использовать MouseLeftButtonUp, но это событие, похоже, не работает.

Я пытался использовать событие PreviewMouseLeftButtonUp, которое вызывается, но selectedItem в ComboBox только модифицируетсяпосле события, которое слишком поздно для меня.

Я также пробовал событие MouseLeftButtonDown, но оно тоже не работает.

WPF:

<Window x:Class="WpfApp1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApp1"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Grid>
        <ComboBox x:Name="cb" VerticalAlignment="Top" HorizontalAlignment="Left" IsHitTestVisible="True"
                  PreviewMouseLeftButtonUp="Cb_PreviewMouseLeftButtonUp"
                  MouseLeftButtonUp="Cb_MouseLeftButtonUp"
                  MouseLeftButtonDown="Cb_MouseLeftButtonDown"
                  SelectionChanged="Cb_SelectionChanged"/>
    </Grid>
</Window>

C # для тестирования:

using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
namespace WpfApp1 {
    public partial class MainWindow : Window {
        public MainWindow() {
            InitializeComponent();
            cb.Items.Add("a");
            cb.Items.Add("b");
        }
        private void Cb_PreviewMouseLeftButtonUp(object sender, MouseButtonEventArgs e) {
            Console.WriteLine("event : Preview mouse UP");
        }
        private void Cb_MouseLeftButtonUp(object sender, MouseButtonEventArgs e) {
            Console.WriteLine("event : Mouse UP"); // Does't fire
        }
        private void Cb_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) {
            Console.WriteLine("event : Mouse DOWN"); // Does't fire either
        }
        private void Cb_SelectionChanged(object sender, SelectionChangedEventArgs e) {
            Console.WriteLine("event : selection changed"); // Only fire if the selected item change
        }
    }
}

Поэтому я просто хочу знать, возможно ли вызвать событие MouseLeftButtonUp.

Ответы [ 2 ]

0 голосов
/ 14 февраля 2019

Благодаря mami я нашел решение:

this.AddHandler(
    ComboBox.MouseLeftButtonUpEvent,
    new MouseButtonEventHandler(Cb_MouseLeftButtonUp),
    true
);

Подробнее здесь

0 голосов
/ 12 февраля 2019

DropDownClosed сработает, даже если вы выберете элемент, который уже выбран.

...