我想實現一個Panel,它知道它的可見區域,將它的內容集中在Visibile區域,即使用戶滾動以查看更多內容。WPF保持UIElement集中在滾動查看器顯示的可見區域
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一些事件上的winform做想要的行爲的一個例子,但是當我將它放置在ScrollViewer中時,它們似乎不會被觸發。
我有一個印象,我應該遠離WPF中的OnRender,所以有辦法達到預期的效果嗎?
編輯:
爲了澄清,在下面的圖像,還有八月和月但網格/邊框/月,包含文本塊足夠多的空間來顯示,是不是圍繞它的可視區域
爲什麼不放置面板(例如,一個網格)與一個TextBlock在ScrollViewer之上? – Clemens
@Clemens那麼,如果我把一個帶有textAlign的文本塊放到一個網格中,它就可以很好地工作_當網格完全可見時 - 當我們說一半的網格被scrollviewer剪切時,文本塊是一半可見的......但是也許我不明白你的意思**頂部**? – Linken
如果你已經子類化了一個面板,你還應該實現IScrollInfo來解決「當我把它放在Scroll ...中時似乎不會觸發」的問題。如果你這樣做,你將包含滾動事件到WPF面板的佈局機制中。當然,添加例程來實現目標。 – tgpdyk