2012-12-10 33 views
0

我創建自己的自定義WPF控件,只是得出了一些文本在其OnRender方法,但是,當我看着這個控制它不佔用任何空間設計師。我需要做什麼做,以確保我的控制佔用的空間由FormattedText對象我這樣的情況回報?確保自定義控制正確的邊界在WPF

+0

你的控制具體做什麼?我不認爲重寫'OnRender()'是幾乎所有情況的最佳方法。 –

+0

它只是繪製文本,目的只是爲了繪製文本,而不會導致過剩,並在與問候行高基線。 –

+0

我不認爲我正確理解。你的控件和普通的'TextBlock'有什麼區別? –

回答

0

這裏是什麼我與渲染方法做一個例子。我真的不需要什麼,但文本,但是,我缺少的InvalidateMeasureInvalidateArrange我創建了新的幾何後調用。

private Geometry textGeometry; 

protected override void OnRender(System.Windows.Media.DrawingContext drawingContext) 
{ 
    if (textGeometry == null) 
    { 
     var currentTypeface = new Typeface(FontFamily, FontStyle, FontWeight, FontStretch); 

     var formattedText = new FormattedText(Text 
      , System.Globalization.CultureInfo.CurrentCulture 
      , System.Windows.FlowDirection.LeftToRight 
      , currentTypeface 
      , FontSize 
      , Foreground 
      ); 

     var d = LineHeight - formattedText.Baseline; 

     textGeometry = formattedText.BuildGeometry(new Point(-formattedText.OverhangLeading, d)); 
     textGeometry.Freeze(); 

     this.InvalidateMeasure(); 
     this.InvalidateArrange(); 
    } 

    drawingContext.DrawGeometry(Foreground, null, textGeometry); 
} 
相關問題