Предметы на холсте не встают до добавления масштабирования/панорамы/предметаC#

Место общения программистов C#
Ответить
Anonymous
 Предметы на холсте не встают до добавления масштабирования/панорамы/предмета

Сообщение Anonymous »

Образец проекта здесь https://github.com/hasstrictlyff14/timelinecomponent
Я пытаюсь создать Zoomable/прокручивать «временную шкалу», как компонент. У этого компонента есть элементы, которые я связываю с наблюдением. У него также есть элементы с холстом, содержащим «блоки времени». Тем не менее, я заметил, что когда я добавляю новый предмет, он всегда подходит к верхней части левого холста. Если я увеличиваю /прокручивать или добавляю другой элемент в коллекцию, он переходит в ее правильную позицию.
Не уверен, что происходит, но кажется проблемой времени, когда моя функция для размещения блоков происходит перед какой-то другой функцией макета.

Код: Выделить всё














< /code>
// called after item is added to draw the blocks
private void PositionBlocks()
{
// Clear and re-add so Canvas Left/Width apply
if (PART_Items == null || ItemsSource == null) return;

// Ensure containers are realized before we set positions
PART_Items.UpdateLayout();

foreach (var item in ItemsSource)
{
var container = (FrameworkElement)PART_Items.ItemContainerGenerator.ContainerFromItem(item);
if (container is null) continue; // is null for last item added when initially added

if (item is TimelineBlock b)
{
var left = XOf(b.Start);
var width = Math.Max(1.0, (b.End - b.Start).Ticks * PixelsPerTick);

Canvas.SetLeft(container, left);
Canvas.SetTop(container, 12); // row baseline for blocks
container.Width = width;
container.Height = 24;
}
}
}
Ссылка Github показывает образец проблемы.


Подробнее здесь: https://stackoverflow.com/questions/797 ... item-added
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»