WPF使UIElement以滚动查看器显示的可见区域为中心

时间:2016-08-17 08:21:50

标签: .net wpf vb.net center contentcontrol

我想实现一个Panel,知道它的可见区域,将其内容集中在visibile区域,即使用户滚动查看更多内容。

以下是我通过重写OnDraw来完成winform所需行为的示例 If all visible : center

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

enter image description here

我尝试从面板继承并覆盖一些事件,例如ArrangeOverride,但是当我将它放在ScrollViewer中时它们似乎没有触发。

我的印象是我应该尽可能远离WPF中的OnRender,所以有没有办法达到预期的效果?

编辑:

为了澄清,在下面的图片中,有足够的空间来显示 August November ,但是网格/边框/画布,包含 Textblock ,不会将其居中于可见区域 enter image description here

1 个答案:

答案 0 :(得分:0)

您可以在ScrollViewer上放置一个带有TextBlock的面板:

<Grid>
    <ScrollViewer>
        ...
    </ScrollViewer>
    <Grid IsHitTestVisible="False">
        <TextBlock Text="Hello, World."
                   HorizontalAlignment="Center" VerticalAlignment="Center"/>
    </Grid>
</Grid>