2011-11-04 75 views
0

你們中的一些人可能會發現這個問題遲鈍,但我仍然不習慣wpf繪圖。我想在可以在畫布上移動的Rectangle上添加格式化文本,並且我有一個提示來覆蓋UIElement.OnRender方法。但是我不知道我是否應該重寫canvas類或Shape類。在任何正確的情況下,引用該示例中描述的方法的drawingContext參數:http://msdn.microsoft.com/en-us/library/bb613560.aspx#FormattedText_Object在wpf中的形狀上繪製文本

最終是否將文本指定給形狀,還是視覺暫時效果不能隨着畫布上的形狀一起移動?

是否有任何進一步的有效方法來繪製文字的形狀?

+0

形狀是在程序運行時創建的,所以基於xaml的解決方案無法應用(據我所知)。我需要動態基礎上的解決方案,即使用C#。 – arjacsoh

+1

[在形狀上繪製文本]的可能重複(http://stackoverflow.com/questions/7977240/draw-text-on-a-shape) –

+0

幾乎所有的XAML都可以很容易地轉換爲C#,應該沒有問題。 –

回答

1

您可以通過放置在一個父容器,允許控制兩方重疊的控制,如GridCanvas

<Grid> 
    <Rectangle Fill="Red" Stroke="Black" 
       HorizontalAlignement="Stretch" VerticalAlignment="Stretch" /> 

    <Label Content="Test" 
      HorizontalAlignment="Center" VerticalAlignment="Center" /> 
</Grid> 

然後,可以將任何格式你想畫一個矩形的頂部文本在Label,在Rectangle,你可以通過設置Grid

0

Rachel的答案的定位中移動集團是正確的,但你可以擴展它一點,有一定的用戶控件定義爲:

而在codebehind define 1. Label:String DependencyProperty,Shape:UIElement DependencyProperty。

手柄形狀的變化事件,並呼籲:你將能夠把事情的動態

private void UpdateShape() 
{ 
    grdShapeContainer.Children.Clear(); 
    if(this.Shape != null) 
    { 
     grdShapeContainer.Children.Add(this.Shape); 
    } 
} 

這樣。

問候, Artak

0

您可能還需要尋找到可以在對象上設置類似網格ZIndex財產(<Rectangle Background="Black" Grid.ZIndex = 99 />例如會把它凌駕其他物品)的製造像「裝有用「屏幕。