2011-08-25 82 views
0

我想繪製一條線,當我雙擊它時,我想在其上放置文本。我正在考慮將它放在內容控件中並繪製一條線,將頂部的摺疊文本框放在上面,檢測到雙擊,顯示文本框將其設置爲文本塊等。我碰到的唯一問題是我不知道該怎麼做設置線的座標,因爲它位於contentcontrol內部,所以繪製了一條實際的線。我一直堅持幾個小時,任何幫助將不勝感激。帶有文本框的連接器行,綁定問題

基本上我需要一個具有開始和結束點屬性的對象,它具有線條形狀,並帶有內容展示器。但我不知道如何去做這件事。任何指針將不勝感激。

回答

1

我們對標記連接的做法也是如此。如果你通過一條路徑繪製連接,你可以使用

LineGeometry.GetPointAtFractionLength(0.5, out midPoint, out tangetMidPoint); 

這樣你就可以在幾何體上獲得中心位置。現在您可以將其存儲到您用於定位標籤的依賴項屬性中。當然,每當你的形狀/幾何形狀改變其位置或大小時,就必須調用它。

這是一個控制的小例子。

public class LabeledLine : ContentControl 
{ 
    public static readonly DependencyProperty LabelPosition ... 
    public static readonly DependencyProperty LineGeometry ... 

    // call me everytime the LineGeometry gets changed. 
    public void UpdatePath() 
    { 

     LineGeometry.GetPointAtFractionLength(0.5, out midPoint, out tangetMidPoint); 
     LabelPosition = midPoint; 
    } 
} 

你的控件模板看起來類似的東西

<ControlTemplate TargetType="{x:Type local:LabeledLine}"> 
    <Canvas x:Name="canvas"> 
     <Path Data="{TemplateBinding LineGeometry}"/> 
     <TextBox Canvas.Left="{TemplateBinding LabelPosition.X}" Canvas.Top="{TemplateBinding LabelPosition.Y}"/> 
    </Canvas> 
<ControlTemplate/> 

現在添加ContentControl功能,你可以代替文本框的添加ContentPresenter。

基本上我需要與 具有線

對於形狀只是添加2個DP屬性爲您的2個位置的開始和結束點屬性的對象。確保添加一個依賴屬性更改處理程序來調用UpdatePath方法。

+0

好的,謝謝我會給它一個鏡頭。 – mihajlv