【问题标题】:How to get correct position of DrawingImage in WPF如何在 WPF 中获取 DrawingImage 的正确位置
【发布时间】:2013-07-18 09:02:47
【问题描述】:

我有代码:

<Canvas>
    <Image Canvas.Left="0" Canvas.Top="0">
        <Image.Source>
            <DrawingImage>
                <DrawingImage.Drawing>
                    <GeometryDrawing>
                        <GeometryDrawing.Pen>
                            <Pen Brush="Black" Thickness="1" />
                        </GeometryDrawing.Pen>
                        <GeometryDrawing.Geometry>
                            <LineGeometry StartPoint="50,50" EndPoint="100,50">
                            </LineGeometry>
                        </GeometryDrawing.Geometry>
                    </GeometryDrawing>
                </DrawingImage.Drawing>
            </DrawingImage>
        </Image.Source>
    </Image>
</Canvas>

我希望它可以是从 50,50 到 100,50 开始的一条线,但最后它是从 0,0 到 50,0 开始的 我似乎在GeometryDrawing 中的StartPoint 没有意义? 有谁知道解决方案?我不想修改Canvas.LeftCanvas.Top

【问题讨论】:

  • 你为什么使用 DrawingImage 而不是形状?绘制Line 控件会简单得多。
  • @Clemens 好吧,这只是一个抽象代码,我知道形状要简单得多,但我需要通过实时控制在屏幕上绘制数百万条线,这是 CAD 软件的,形状很慢。
  • 那你应该看看如何在可视层中绘制。开始阅读WPF Graphics Rendering OverviewUsing DrawingVisual Objects
  • 谢谢您的解决方案看起来很有趣,但我希望从这里直接获得帮助...

标签: wpf xaml drawing geometrydrawing


【解决方案1】:

显然,DrawingImage 已调整为实际绘制的几何图形的边界。为了解决这个问题,您可以将 LineGeometry 替换为包含点 (0,0)PathGeometry,但不绘制它:

<GeometryDrawing.Geometry>
    <PathGeometry>
        <PathFigure StartPoint="0,0">
            <LineSegment Point="50,50" IsStroked="False"/>
            <LineSegment Point="100,50"/>
        </PathFigure>
    </PathGeometry>
</GeometryDrawing.Geometry>

请注意,StartPoint="0,0" 是默认值。只是为了清楚起见。

【讨论】:

    【解决方案2】:

    我用透明画笔在所有东西周围绘制了一个矩形几何图形,取得了很好的效果。您可以在 DrawingGroup 中同时组合(矩形和路径)。

    <Canvas>
        <Image Canvas.Left="0" Canvas.Top="0">
            <Image.Source>
                <DrawingImage>
                    <DrawingImage.Drawing>
    
                        <DrawingGroup>
    
                        <GeometryDrawing Brush="Transparent"/>
                             <RectangleGeometry>
                                 <!-- here you create a rectangle with desired bounds -->
                             </RectangleGeometry>
                        </GeometryDrawing>
    
                        <GeometryDrawing>
                            <GeometryDrawing.Pen>
                                <Pen Brush="Black" Thickness="1" />
                            </GeometryDrawing.Pen>
                            <GeometryDrawing.Geometry>
                                <LineGeometry StartPoint="50,50" EndPoint="100,50">
                                </LineGeometry>
                            </GeometryDrawing.Geometry>
                        </GeometryDrawing>
    
                        </DrawingGroup>
    
                    </DrawingImage.Drawing>
                </DrawingImage>
            </Image.Source>
        </Image>
    </Canvas>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-20
      • 2023-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-25
      • 1970-01-01
      相关资源
      最近更新 更多