Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 为什么这个简单的线段在Silverlight中从画布中心底部跳到左上角?_Wpf_Silverlight_Wpf Controls_Line Segment - Fatal编程技术网

Wpf 为什么这个简单的线段在Silverlight中从画布中心底部跳到左上角?

Wpf 为什么这个简单的线段在Silverlight中从画布中心底部跳到左上角?,wpf,silverlight,wpf-controls,line-segment,Wpf,Silverlight,Wpf Controls,Line Segment,我有一些非常简单的代码,“正确”地在WPF(Silverlight 4)中的1024x768蓝色画布上绘制了一条短的垂直黑线 现在,如果我更改线段的端点,那么除了从起点更改Y之外,我还更改了X(虽然只更改了一个像素),整个线条将在画布的左上角渲染。下面是修改后的代码 private void UserControl_Loaded(object sender, RoutedEventArgs e) { var myPa

我有一些非常简单的代码,“正确”地在WPF(Silverlight 4)中的1024x768蓝色画布上绘制了一条短的垂直黑线

现在,如果我更改线段的端点,那么除了从起点更改Y之外,我还更改了X(虽然只更改了一个像素),整个线条将在画布的左上角渲染。下面是修改后的代码

            private void UserControl_Loaded(object sender, RoutedEventArgs e)
            {
                var myPathFigure = new PathFigure
                {
                    StartPoint = new Point(492, 748)
                };

                var line1 = new LineSegment
                {
                    Point = new Point(491, 708)
                };

                myPathFigure.Segments.Add(line1);

                var myPathGeometry = new PathGeometry();
                myPathGeometry.Figures.Add(myPathFigure);

                var myPath = new Path
                {
                    Data = myPathGeometry,
                    Stretch = Stretch.Fill,
                    Stroke = new SolidColorBrush(Color.FromArgb(0xFF, 0x0, 0x0, 0x0)),
                    StrokeThickness = 10
                };

                PathCanvas.Children.Add(myPath);
            }
如果两者都在画布的中底渲染,或者都在画布的左上角渲染,我可以理解。但我不明白为什么第一个代码块导致线条呈现中间底部,而第二个代码块导致线条呈现左上

请注意,我没有使用Canvas.Top或Canvas.Left


感谢您的任何见解

这里的问题是,您创建的属性设置为
Stretch.Fill
。我想您希望将Stretch设置为默认值,
Stretch.None

第一个代码块导致在画布中心渲染线的原因是,其单个线段中的两个点具有相同的X坐标,因此路径的宽度为0。显然,宽度为0的元素不能水平拉伸。Silverlight可以尝试垂直拉伸您的路径,因为它具有非零高度,但它似乎选择不这样做

类似地,如果绘制水平线(因此路径的高度为0),Silverlight也不会拉伸该线

在第二个代码块中,当更改X坐标时,即使更改了1个像素,也会为路径指定非零的宽度和高度。Silverlight可以拉伸它以填充整个画布


请注意,作为各种路径段的容器的路径控件本身正在拉伸,而不是组成它的各个线段。

这里的问题是,您正在创建属性设置为
Stretch.Fill
。我想您希望将Stretch设置为默认值,
Stretch.None

第一个代码块导致在画布中心渲染线的原因是,其单个线段中的两个点具有相同的X坐标,因此路径的宽度为0。显然,宽度为0的元素不能水平拉伸。Silverlight可以尝试垂直拉伸您的路径,因为它具有非零高度,但它似乎选择不这样做

类似地,如果绘制水平线(因此路径的高度为0),Silverlight也不会拉伸该线

在第二个代码块中,当更改X坐标时,即使更改了1个像素,也会为路径指定非零的宽度和高度。Silverlight可以拉伸它以填充整个画布

请注意,作为各种路径段的容器的路径控件本身正在拉伸,而不是拉伸组成它的各个线段

            private void UserControl_Loaded(object sender, RoutedEventArgs e)
            {
                var myPathFigure = new PathFigure
                {
                    StartPoint = new Point(492, 748)
                };

                var line1 = new LineSegment
                {
                    Point = new Point(492, 708)
                };

                myPathFigure.Segments.Add(line1);

                var myPathGeometry = new PathGeometry();
                myPathGeometry.Figures.Add(myPathFigure);

                var myPath = new Path
                {
                    Data = myPathGeometry,
                    Stretch = Stretch.Fill,
                    Stroke = new SolidColorBrush(Color.FromArgb(0xFF, 0x0, 0x0, 0x0)),
                    StrokeThickness = 10
                };

                PathCanvas.Children.Add(myPath);
            }
            private void UserControl_Loaded(object sender, RoutedEventArgs e)
            {
                var myPathFigure = new PathFigure
                {
                    StartPoint = new Point(492, 748)
                };

                var line1 = new LineSegment
                {
                    Point = new Point(491, 708)
                };

                myPathFigure.Segments.Add(line1);

                var myPathGeometry = new PathGeometry();
                myPathGeometry.Figures.Add(myPathFigure);

                var myPath = new Path
                {
                    Data = myPathGeometry,
                    Stretch = Stretch.Fill,
                    Stroke = new SolidColorBrush(Color.FromArgb(0xFF, 0x0, 0x0, 0x0)),
                    StrokeThickness = 10
                };

                PathCanvas.Children.Add(myPath);
            }