Спасибо, что нашли время ответить. Я попробовал ваш вариант и не смог как-то заставить его работать.
Я пытался вставить вложенные операторы if в кодовый блок def Enter_presssed (event), и он работает до определенного момента. Он распознает первое «если» и последнее «еще», но не промежуточные и другие между ними.
Разве программа не должна видеть и использовать каждый новый input_get после нажатия Return в качестве ответа на последний вопрос, отображаемый в виджете «Текст»?
Это - вид сверхсложного способа сделать его, но это может работать. Во-первых, разделите DataGridRowsPresenter на подклассы и переопределите метод OnViewportOffsetChanged. Затем копируйте стандартный шаблон управления для datagrid и замените DataGridRowsPresenter Вашим собственным. Я оставляю детали тестирования хита на строку относительно области просмотра до Вас ;-).
Что Вы пытаетесь выполнить, конкретно? Возможно, мы можем придумать лучший путь, поскольку это может быть очень хрупким и требует набора дополнительной работы (т.е. хранение шаблона управления в синхронизации, если они обновляют его).
У меня сработал следующий метод:
// mHorizontalScrollBar is the HorizontalScrollBar subclass control's instance
// Get the total item count
nTotalCount = DataGrid1.Items.Count;
// Get the first visible row index
nFirstVisibleRow = mHorizontalScrollBar.Value;
// Get the last visible row index
nLastVisibleRow = nFirstVisibleRow + nTotalCount - mHorizontalScrollBar.Maximum;