2011-03-28 81 views
2

我創建了一個自定義行,旁邊有一些文本。該形狀是System.Windows.Shapes.Shape的子類。出於某種原因,當我更改線條的座標時,文本不會刷新。我知道關於InvalidateVisual()的方法,但是每次我移動元素時都必須調用它來重繪形狀。我相信有一個更好的方法來做到這一點。我究竟做錯了什麼? ATM我沒有想法。如何正確刷新WPF中的自定義形狀?

public class MyShape : Shape 
{ 
    LineGeometry line; 
    FormattedText text; 

    public MyShape() 
    { 
     line = new LineGeometry(); 
     text = new FormattedText(
       Edge.Length.ToString(), 
       Thread.CurrentThread.CurrentCulture, 
       System.Windows.FlowDirection.LeftToRight, 
       new Typeface("Verdana"), 10, Brushes.Black); 
    } 

    // Specify the X1 dependency property: 
    public static readonly DependencyProperty X1Property = 
     DependencyProperty.Register("X1", 
     typeof(double), typeof(MyShape), 
     new FrameworkPropertyMetadata(0.0, 
     FrameworkPropertyMetadataOptions.AffectsMeasure)); 

    public double X1 
    { 
     set { SetValue(X1Property, value); } 
     get { return (double)GetValue(X1Property); } 
    } 

    // Specify the Y1 dependency property: 
    public static readonly DependencyProperty Y1Property = 
     DependencyProperty.Register("Y1", 
     typeof(double), typeof(MyShape), 
     new FrameworkPropertyMetadata(0.0, 
     FrameworkPropertyMetadataOptions.AffectsMeasure)); 

    public double Y1 
    { 
     set { SetValue(Y1Property, value); } 
     get { return (double)GetValue(Y1Property); } 
    } 

    /*Some other Dependency Properties.... and*/ 

    protected override Geometry DefiningGeometry 
    { 
     get 
     { 
      GeometryGroup geometryGroup = new GeometryGroup(); 
      line.StartPoint = new Point(X1, Y1); 
      line.EndPoint = new Point(X2, Y2); 
      text.SetFontWeight(FontWeights.ExtraLight); 
      Geometry geometry = text.BuildGeometry(new Point((X1 + X2)/2, (Y1 + Y2)/2)); 
      geometryGroup.Children.Add(geometry); 
      geometryGroup.Children.Add(line); 
      return geometryGroup; 
     } 
    } 
} 

回答

5
+0

我設立另一個DEP道具與您的建議配置的文本,它似乎做的工作,只是它後,才設置其屬性的支持刷新。如果我從'DefiningGeometry'中設置,它不起作用。有什麼建議麼? – 2011-03-28 13:50:18

+0

我的不好,你的解決方案工作正常。它有我的代碼中的其他東西,防止刷新:)。無論如何,謝謝你的提示。 – 2011-03-29 18:03:24