我想实现一个Panel,知道它的可见区域,将其内容集中在visibile区域,即使用户滚动查看更多内容。
以下是我通过重写OnDraw来完成winform所需行为的示例
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中时它们似乎没有触发。
我的印象是我应该尽可能远离WPF中的OnRender,所以有没有办法达到预期的效果?
编辑:
为了澄清,在下面的图片中,有足够的空间来显示 August 和 November ,但是网格/边框/画布,包含 Textblock ,不会将其居中于可见区域
答案 0 :(得分:0)
您可以在ScrollViewer上放置一个带有TextBlock的面板:
<Grid>
<ScrollViewer>
...
</ScrollViewer>
<Grid IsHitTestVisible="False">
<TextBlock Text="Hello, World."
HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Grid>
</Grid>