Рекламный элемент и события в украшенном элементе

У меня есть собственная форма линии, в которой используется украшение для отображения массива и некоторого текста в середине этой строки.

alt text

Проблема в том, что украшенный ведет себя независимо от украшенного элемента, а не «переносит» на него событие. В следующем коде я вынужден вручную повторно связать элементы украшения с элементом украшения ( ta.MouseLeftButtonDown + = Adorner_MouseLeftButtonDown; ), но, к сожалению, даже это не работает ... Проблема в том, что украшенный ведет себя независимо от украшенного элемента и не ...

У меня есть собственная форма линии, в которой используется украшение для отображения массива и некоторого текста в середине этой строки.

alt text

Проблема в том, что украшенный ведет себя независимо от украшенного элемента, а не «переносит» на него событие. В следующем коде я вынужден вручную повторно связать элементы украшения с элементом украшения ( ta.MouseLeftButtonDown + = Adorner_MouseLeftButtonDown; ), но, к сожалению, даже это не работает ... Проблема в том, что украшенный ведет себя независимо от украшенного элемента и не ...

У меня есть собственная форма линии, в которой используется украшение для отображения массива и некоторого текста в середине этой строки.

alt text

Проблема в том, что украшенный ведет себя независимо от украшенного элемента, а не «переносит» на него событие. В следующем коде я вынужден вручную повторно связать элементы украшения с элементом украшения ( ta.MouseLeftButtonDown + = Adorner_MouseLeftButtonDown; ), но, к сожалению, даже это не работает ... событие к нему. В следующем коде я вынужден вручную повторно связать элементы украшения с элементом украшения ( ta.MouseLeftButtonDown + = Adorner_MouseLeftButtonDown; ), но, к сожалению, даже это не работает ... событие к нему. В следующем коде я вынужден вручную повторно связать элементы украшения с элементом украшения ( ta.MouseLeftButtonDown + = Adorner_MouseLeftButtonDown; ), но, к сожалению, даже это не работает ... Может ли кто-нибудь посоветовать, что не так при вызове this.OnMouseLeftButtonDown, почему я не получаю соответствующее событие?

public class SegmentLine : Shape
{
    AdornerLayer aLayer;

    public static readonly DependencyProperty X1Property;
    public static readonly DependencyProperty X2Property;
    public static readonly DependencyProperty Y1Property;
    public static readonly DependencyProperty Y2Property;
    ...

    static SegmentLine() {
        X1Property = DependencyProperty.Register("X1", typeof(double), typeof(SegmentLine), new FrameworkPropertyMetadata(double.NaN,
            FrameworkPropertyMetadataOptions.AffectsRender));
        X2Pro...
    }

    public SegmentLine()
        : base()
    {
        this.Loaded += SegmentLine_Loaded;
    }

    void SegmentLine_Loaded(object sender, RoutedEventArgs e)
    {
        aLayer = AdornerLayer.GetAdornerLayer(this);
        if (aLayer != null)
        {
            TextAdorner ta = new TextAdorner(this);
            //ta.IsHitTestVisible = false;
            ta.MouseLeftButtonDown += Adorner_MouseLeftButtonDown;
            aLayer.Add(ta);
        }
    }

    void Adorner_MouseLeftButtonDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
    {
        // !! try to rise the MouseLeftButtonDown event
        this.OnMouseLeftButtonDown(e);
    }

    protected override void OnRender(DrawingContext drawingContext)
    {
        base.OnRender(drawingContext);
        if (aLayer != null)
            aLayer.Update();
    }

    class TextAdorner : Adorner
    {
        public TextAdorner(UIElement adornedElement)
            : base(adornedElement) { }

        protected override void OnRender(DrawingContext drawingContext)
        {
            // ADD LABEL ...
            FormattedText ft = new FormattedText(...);
            drawingContext.DrawText(ft, midPoint);

            // Add ARROW ...
            var myPathGeometry = new PathGeometry { Figures = myPathFigureCollection };            
            drawingContext.DrawGeometry(Brushes.Black, null, myPathGeometry);
        }
    }

    protected override System.Windows.Media.Geometry DefiningGeometry
    {
        get
        {
            var geometryGroup = new GeometryGroup();
            // Add line
            geometryGroup.Children.Add(new LineGeometry(new Point(X1, Y1), new Point(X2, Y2)));
            return geometryGroup;
        }
    }    
}
5
задан serhio 18 November 2010 в 12:25
поделиться