在FlowDocument中設置TableCell垂直居中遇到的問題


最近在程序中用到了WPF中的FlowDocument生成一個文檔,其中有對System.Windows.Documents.Table的使用,在使用的過程中發現這傢伙居然不支持設置垂直居中。一個程序,內部邏輯是裏子,外部顯示是面子,而boss顯然是既要裏子更要面子,於是折騰開始。

先對着MSDN擼,無果。接着滿世界問問題,在stackoverflow上提問題,有人給了個線索,這個針對一個TableRow只有一個TableCell的情況時是極好的,奈何前期別人已經將程序寫成了一個TableRow中有多個TableCell,要我再去更改程序邏輯比較頭疼。於是上MSDN論壇求助,熱心的老外給了我一個計算TableCell高度的方法(雖然最後發現有點問題,還是非常感謝)。

最後的方法是通過遍歷Table來獲取其每行的高度,並通過設置該行TableCell的padding,使其呈現垂直居中的效果。獲取行高度的方法如下:

        private double getRowHeight(TableRow row)
        {
            double maxHeight = 0;
            foreach (TableCell cell in row.Cells)
            {
                Rect startRect = cell.ElementStart.GetCharacterRect(LogicalDirection.Forward);
                Rect endRect = cell.ElementEnd.GetNextInsertionPosition(LogicalDirection.Backward).GetCharacterRect(LogicalDirection.Forward);
                double Height = (endRect.Bottom - startRect.Top);
                maxHeight = maxHeight > Height ? maxHeight : Height;
            }
            return maxHeight;
        }


具體的遍歷方法就不貼了,然後是通過一個按鈕來觸發垂直居中的設置,爲了避免設置過程中界面卡死,採用異步刷新的方式,並且將後臺線程中調用操作的優先級設置得較低。


好了,思路就是這樣,個人感覺還是比較挫,不過鑑於我是一個菜鳥,再接再厲吧。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章