none
如何在代码文件中修改Path对象的Data属性 RRS feed

  • 问题

  • 我想实现高亮鼠标框选区域的功能。请问是否可以使用Path对象来实现?

    .xaml

    <Path x:Name="FindSelectionShape" Visibility="Visible" Opacity="0.33" Fill="#FFFFFF00"/>

    .cpp

    FindSelectionShape->Data =??;

    2012年5月14日 10:02

答案

  • C++ code:

    	Windows::UI::Xaml::Shapes::Path^ path = ref new Windows::UI::Xaml::Shapes::Path();
    	path->Stroke = ref new SolidColorBrush(Windows::UI::Colors::Red);
    	PathGeometry^ pathGeometry = ref new PathGeometry();
    	PathFigureCollection^ figures = pathGeometry->Figures;
    	PathFigure^ figure = ref new PathFigure();
    	figure->StartPoint = Point(0, 0);
    	LineSegment^ l = ref new LineSegment();
    	l->Point = Point(100, 100);
    	figure->Segments->Append(l);
    	// Can add other types, e.g. PolyLineSegment, PathSegment, ArcSegment, BezierSegment
    	figures->Append(figure);
    	path->Data = pathGeometry;


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    • 已标记为答案 frglig 2012年5月18日 0:51
    2012年5月17日 7:31
    版主

全部回复

  • 使用路径标注语法

    http://msdn.microsoft.com/zh-CN/library/cc189041%28v=vs.95%29.aspx  希望有帮助

    2012年5月15日 5:08
  • 这个跟在WPF, Silverlight中设置Path的Data是一样的。如下:

    C# code:

                Windows.UI.Xaml.Shapes.Path path = new Windows.UI.Xaml.Shapes.Path();
                path.Stroke = new SolidColorBrush(Windows.UI.Colors.Red);
                var pathGeometry = new PathGeometry();
                var figures = pathGeometry.Figures;
                PathFigure figure = new PathFigure();
                figure.StartPoint = new Point(0, 0);
                LineSegment l = new LineSegment();
                l.Point = new Point(100, 100);
                figure.Segments.Add(l);
                // Can add other types, e.g. PolyLineSegment, PathSegment, ArcSegment, BezierSegment
                figures.Add(figure);
                path.Data = pathGeometry;


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    2012年5月17日 7:15
    版主
  • C++ code:

    	Windows::UI::Xaml::Shapes::Path^ path = ref new Windows::UI::Xaml::Shapes::Path();
    	path->Stroke = ref new SolidColorBrush(Windows::UI::Colors::Red);
    	PathGeometry^ pathGeometry = ref new PathGeometry();
    	PathFigureCollection^ figures = pathGeometry->Figures;
    	PathFigure^ figure = ref new PathFigure();
    	figure->StartPoint = Point(0, 0);
    	LineSegment^ l = ref new LineSegment();
    	l->Point = Point(100, 100);
    	figure->Segments->Append(l);
    	// Can add other types, e.g. PolyLineSegment, PathSegment, ArcSegment, BezierSegment
    	figures->Append(figure);
    	path->Data = pathGeometry;


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    • 已标记为答案 frglig 2012年5月18日 0:51
    2012年5月17日 7:31
    版主
  • 你好。我现在是用下面的代码实现我要的效果:
    Windows::UI::Xaml::Media::GeometryCollection^ m_GeometColl = ref new Windows::UI::Xaml::Media::GeometryCollection();
    Windows::UI::Xaml::Media::GeometryGroup^ m_GeomeGrp = ref new Windows::UI::Xaml::Media::GeometryGroup();
    m_GeomeGrp->Children = m_GeometColl;
    //m_GeometColl添加各种Geometry,例如RectangleGeometry等。
    m_path->Data = m_GeomeGrp;
    不知道这种方法和你提供的方法,哪种效率高?
    2012年5月17日 8:03
  • 效率应该不分上下,只是你的代码中用了 GeometryGroup,而我是基于基本的 Segment。但是都是一样的,最终Path解释起来还是以Segment为准。

    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    2012年5月17日 8:39
    版主
  • 谢谢。问题已经解决了。
    2012年5月18日 0:51