ElementFlow: исключение в MeasureOverride
Я пытаюсь использовать FluidKits ElementFlow-control в моем приложении, но получаю исключение в методе MeasureOverride ElementFlow.
Переопределение измерения макета элемента 'FluidKit.Controls.ElementFlow' не должно возвращать PositiveInfinity в качестве его DesiredSize, даже если бесконечность передана как доступный размер.
В примере приложения, следующего за FluidKit, все идет хорошо. Когда вызывается MeasureOverride, availableSize-struct инициализируется границами элемента управления, но в моем приложении он поставляется с INF для ширины и высоты.
Я попытался найти различия между образцом и моим приложением, но оба они представляют собой окно с сеткой со списком, который использует ElementFlow для ItemsPanel.
Я обнаружил, что другие борются с тем же исключением, но я не нашел никакого решения, кроме как дать списку явный размер. Но я не хочу давать ему размер, я хочу, чтобы сетка управляла своим макетом.
Какие-либо предложения?
3 ответа
Смотрите обсуждение на сайте FluidKit CodePlex. Простой ответ - открыть код ElementFlow и изменить возвращаемое значение в MeasureOverride с availableSize на _viewport.DesiredSize.
Есть ли шанс, что вы можете опубликовать пример кода?
У меня была похожая проблема, оказалось, что я должен был использовать сетку в качестве корневого элемента (ранее сетка была в Canvas, в итоге я переместил ее в пользовательский элемент управления, и все работало нормально).
Вы просто не можете использовать элемент управления ElementFlow в сетке или панели переменного размера. Он не написан для обработки этой ситуации, как указано в исключении, которое вы получаете.
Вы не показали свой код. Я могу только предположить, что ваши элементы управления вложены и определены таким образом, что один из них может расти бесконечно. Например, вставьте ScrollViewer на страницу в качестве корневого элемента и включите прокрутку в определенном направлении. Затем у вас есть элемент управления, который позволяет себе увеличиваться в этом направлении и передает бесконечность дочерним элементам управления при запросе их измерения (в этом конкретном направлении). Если бы элемент управления ElementFlow был потомком ScrollViewer, вы бы получили именно это исключение.
Если вы покажете свой xaml для страницы, должно быть легко увидеть, какой родительский элемент управления позволяет его контенту расти бесконечно.