Вопрос

В приложении WPF у меня есть куча пользовательских контролей в сетке. Для обработки щелчков мыши на них я использую MouseLeftButtonDown Событие сетки и в обработке событий я проверяю, какой CustomControl был нажат:

private void Grid_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
    {
        FrameworkElement feSourceComm = e.Source as FrameworkElement;
        MyCustomControl SCurrentComm = new MyCustomControl();            
        try
        {
            SCurrentComm = (MyCustomControl)feSourceComm;
        }
        catch (Exception)
        {
...

Проблема появилась, когда я поместил все CustomControls в USERCONTROL, а затем внутри сетки. В этом случае подход не работает.
Я проверил тип источника клика в каждом случае e.Source.GetType().ToString(); и получить следующие результаты:

Когда нет проблем (в случае, если я помещаю Customcontrols в сетку без USerControl)

MyProjectNamespace.MyCustomControl

Когда я помещаю Customcontrols в UserControl, а затем в сетку

MyProjectNamespace.UserControls.MyUserControlName

Когда я помещаю CustomControls в USERCONTROL, а затем в сетку и загружаю USERCONTROL из внешнего файла по XamlReader.Load

System.Windows.Controls.UserControl

Итак, мой вопрос:
Как сделать Customcontrols, как e.Source Когда они находятся в UserControl?

Это было полезно?

Решение

e.OriginalSource Расскажу вам, какой конкретный элемент произошел щелчок. Если это не ваш CustomControl, пройдите по родительской цепи OriginalSource Пока вы не найдете свой пользовательский контроль

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top