Я хотел бы реализовать Panel, осведомленную о своей видимой области, центрируя ее содержимое в видимой области, даже когда пользователь прокручивает, чтобы увидеть больше содержимого.
Вот пример желаемого поведения, которое я сделал в winform, переопределив OnDraw
< img src="https://i.stack.imgur.com/wL14c.jpg" alt="Если все видно: по центру">
Protected Overrides Sub OnDraw(graphics As GraphicsCache, area As RectangleF)
brush = graphics.BrushsCache.GetBrush(ForeColor)
Dim r = RectangleF.Intersect(graphics.Graphics.ClipBounds, area)
graphics.Graphics.DrawString(Value, Font, brush, r, StringFormat)
End Sub
Я попытался наследовать от панели и переопределить некоторые события, такие как ArrangeOverride, но они, похоже, не срабатывают, когда я помещаю их в ScrollViewer.
У меня сложилось впечатление, что я должен держаться подальше от OnRender в WPF, так есть ли способ добиться желаемого эффекта?
РЕДАКТИРОВАТЬ :
Чтобы уточнить, на изображении ниже более чем достаточно места для отображения августа и ноября, но сетка/граница/холст, содержащий Текстовый блок, не центрирует его в видимой области