代码之家  ›  专栏  ›  技术社区  ›  serhio

更改WPF中的选择“样式”

  •  0
  • serhio  · 技术社区  · 15 年前

    我在WPF应用程序中有一个带有一些行的图表。

    当用户选择该行(鼠标)时,我需要更改其外观。 La:

    在WPF中,两行代码可以如下所示:

    行 x1=“10”y1=“20”x2=“150”y2=“20” stroke=“black”strokethickness=“1”/> 直线;直线 x1=“10”y1=“50”x2=“150”y2=“50” stroke=“blue”strokethickness=“3”/> 多边形 points=“80,45 80,55 90,50” stroke=“blue”fill=“blue”/> < /代码>
    1. 当用户选择对象(线条)时,如何更改线条“样式”?

    2. 是否可以将“箭头”保持在段的中间?

    当用户选择该行(鼠标)时,我需要更改其外观。 洛杉矶:

    alt text

    在WPF中,两行代码可以如下所示:

            <Line
                X1= "10" Y1="20" X2="150" Y2="20"
                Stroke="Black" StrokeThickness="1" />
    
            <Line
                X1= "10" Y1="50" X2="150" Y2="50"
                Stroke="Blue" StrokeThickness="3" />  
            <Polygon 
                Points="80,45 80,55 90,50" 
                Stroke="Blue" Fill="Blue" />
    
    1. 当用户选择对象(线条)时,如何更改线条“样式”?

    2. 是否可以将“箭头”保持在段的中间?

    3 回复  |  直到 15 年前
        1
  •  3
  •   Holstebroe    15 年前

       public class Arrow : Shape
        {
    
            public static readonly DependencyProperty X1Property = DependencyProperty.Register("X1", typeof(double), typeof(Arrow), new FrameworkPropertyMetadata(0.0, FrameworkPropertyMetadataOptions.AffectsRender | FrameworkPropertyMetadataOptions.AffectsMeasure));
    
            [TypeConverter(typeof(LengthConverter))]
            public double X1
            {
            get { return (double)base.GetValue(X1Property); }
            set { base.SetValue(X1Property, value); }
            }
    
            // TODO: Replace with dependency properties
            [TypeConverter(typeof(LengthConverter))]
            public double X2 { get; set; }
    
            [TypeConverter(typeof(LengthConverter))]
            public double Y1 { get; set; }
    
            [TypeConverter(typeof(LengthConverter))]
            public double Y2 { get; set; }
    
            [TypeConverter(typeof(LengthConverter))]
            public double ArrowWidth { get; set; }
    
            [TypeConverter(typeof(LengthConverter))]
            public double ArrowLength { get; set; }
    
    
    
            protected override Geometry DefiningGeometry
            {
                get 
                { 
                    var geometryGroup = new GeometryGroup();
    
                    // Add arrow head
                    var midPoint = new Point((X1 + X2) / 2.0, (Y1 + Y2) / 2.0);
                    double dX = (X2 - X1);
                    double dY = (Y2 - Y1);
                    double length = Math.Sqrt(dX*dX + dY*dY);
                    dX /= length;
                    dY /= length;
                    var myPathSegmentCollection = new PathSegmentCollection 
                        {
                            new LineSegment {Point = new Point(midPoint.X - dX * ArrowLength + dY * ArrowWidth/2.0, midPoint.Y - dY * ArrowLength - dX * ArrowWidth/2.0)},
                            new LineSegment {Point = new Point(midPoint.X - dX * ArrowLength - dY * ArrowWidth/2.0, midPoint.Y - dY * ArrowLength + dX * ArrowWidth/2.0)},
                            new LineSegment {Point = midPoint},
                        };
                    var myPathFigure = new PathFigure {StartPoint = midPoint, Segments = myPathSegmentCollection};
    
                    var myPathFigureCollection = new PathFigureCollection {myPathFigure};
    
                    var myPathGeometry = new PathGeometry {Figures = myPathFigureCollection};
                    geometryGroup.Children.Add(myPathGeometry);
                    // Add line
                    geometryGroup.Children.Add(new LineGeometry(new Point(X1, Y1), new Point(X2, Y2)));
                    return geometryGroup;
                }
            }
        }
    

        2
  •  2
  •   Wonko the Sane    15 年前

        3
  •  0
  •   MajorRefactoring    15 年前

    private void Line_MouseDown( object sender, MouseButtonEventArgs e )
    {
        ( (Line)sender ).Stroke = Brushes.Blue;
    }
    

    推荐文章