Как найти пиксельные координаты выбранной ячейки в окне сетки WPF - PullRequest
0 голосов
/ 06 мая 2011

Я несколько дней пытался ответить на этот вопрос.Я нашел фрагменты кода, которые подходят близко, но не дали мне то, что мне нужно.

Мне нужно иметь возможность идентифицировать координаты x и y конкретной ячейки в сетке данных WPF.ячейка будет выбранной ячейкой.Мне также нужно иметь возможность определить точный размер этой ячейки.

это так, чтобы я мог накладывать контроль редактора на эту ячейку, когда пользователь редактирует ее, чтобы я мог принимать ввод пользователя.1006 * причина, по которой это нужно сделать, в том, что мне нужны разные редакторы по строкам.в таблице данных есть несколько столбцов.в частности, один столбец запрашивает у пользователя значение.в зависимости от содержимого другого столбца изменяется тип ввода, который пользователь должен предоставить в столбце значений.для ввода текста или чисел требуется текстовое поле.некоторые строки являются логическими, и пользователь должен выбрать из флажка.некоторые строки имеют предопределенные значения, и пользователю требуется поле со списком.Есть также строки пути к файлу, и я хочу, чтобы автоматически открывался диалог открытия файла и помещал выбранное имя файла в ячейку.поэтому я не могу просто использовать встроенные редакторы в сетке данных, потому что это позволяет мне указывать формат по столбцам, но не по строкам.конечно, я не знаю содержимого строк заранее, поэтому это нужно сделать во время выполнения.

Я смог переместить элементы управления редактора и сделать их видимыми и невидимыми.Мне удалось получить координату X левой стороны выбранной ячейки.Я также смог найти ширину выбранной ячейки.

координата Y ячейки и высота ячейки, которые я пытался различными способами, но ни одна из них не сработала.

У меня уже есть логический поток, чтобы понять, как это сделать.Я сделал пример запуска в приложении оконных форм.100 строк кода и около 30 минут, и он работал отлично.Я пытался выяснить, как сделать то же самое в WPF в течение нескольких дней.любая помощь будет оценена.

1 Ответ

1 голос
/ 06 мая 2011

Вот не очень элегантное решение:

private void grid_MouseDown(object sender, MouseButtonEventArgs e)
    {
        Point point;
        Point point2;

        TextBlock tb = (TextBlock)e.OriginalSource;
        DataGridCell dgc = (DataGridCell)tb.Parent;
        point = e.GetPosition(dgc);
        point2 = e.GetPosition(this);
        double cell_width = dgc.ActualWidth;
        double absolute_x = point2.X - point.X;
    }

Есть только X, но то же самое для Y. Основная проблема в том, что для определения источника (TextBlock, Border и т. Д.) Потребуется переключатель, и это работает, когда по ячейке нажимают второй время (хотя это может быть изменено со свойствами).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...