当前位置: 首页 > 知识库问答 >
问题:

更改画布中的控件零点

谢泽语
2023-03-14

在画布中绘制项目时,位置是从画布中项目的顶部开始:

<Canvas Name="cnvMain"
        Width="80"
        Height="80">
  <Ellipse Canvas.Top="20"
           Canvas.Left="40"
           Width="40"
           Height="40"
           Fill="Gray" />
</Canvas>

现在我需要的是从元素的底部进行测量,如下所示:

最后,我希望能够设置从椭圆底部到画布顶部的距离。注:椭圆有时不能是一个圆,翻转它是不可能的。此外,我不知道运行前的高度,因此在xaml中设置负边距也不起作用。

(图片和示例xaml取自:http://weblogs.asp.net/psheriff/centering-text-within-a-wpf-shape-using-a-canvas)

共有1个答案

宋望
2023-03-14

如果要指定椭圆底部到画布底部的距离,可以替换画布。在画布上方。底部:

<Ellipse Canvas.Bottom="20" Canvas.Left="40" Width="40" Height="40" Fill="Gray"/>

对于从椭圆底部到画布顶部的距离,您可以指定负边距:

<Ellipse Canvas.Top="20" Canvas.Left="40" Width="40" Height="40" Fill="Gray"
         Margin="0,-40,0,0"/>

或适当的渲染转换:

<Ellipse Canvas.Top="20" Canvas.Left="40" Width="40" Height="40" Fill="Gray">
    <Ellipse.RenderTransform>
        <ScaleTransform ScaleY="-1"/>
    </Ellipse.RenderTransform>
</Ellipse>

为了反转整个画布坐标系的y方向,可以对画布应用渲染变换:

<Canvas ... RenderTransformOrigin="0,0.5">
    <Canvas.RenderTransform>
        <ScaleTransform ScaleY="-1"/>
    </Canvas.RenderTransform>
    ...
</Canvas>

编辑:您也可以将椭圆放在另一个高度为零的画布中,并将其附加到较低的画布边框:

<Canvas Canvas.Top="20" Canvas.Left="40" Width="0" Height="0">
    <Ellipse Canvas.Bottom="0" Width="40" Height="40" Fill="Gray"/>
</Canvas>
 类似资料:
  • 我错过了什么? 为了便于阅读,这里提供了一个要点,并附带了一个测试用例:https://Gist.github.com/teyc/5668517

  • 主要内容:Canvas控件基本属性,Canvas控件绘图常用方法Canvas 控件具有两个功能,首先它可以用来绘制各种图形,比如弧形、线条、椭圆形、多边形和矩形等,其次 Canvas 控件还可以用来展示图片(包括位图),我们将这些绘制在画布控件上的图形,称之为“画布对象”。 每一个画布对象都有一个“唯一身份ID”,这是 Tkinter 自动为其创建的,从而方便控制和操作这些画布对象。 通过 Canvas 控件创建一个简单的图形编辑器,让用户可以达到自定义图形的

  • 我的活动布局如下: 当我将布局中的animateLayoutChanges设置为true时,每当NestedScrollView内部发生布局更改时,生成的布局就会与AppBarLayout的内容重叠。 我尝试了这个评论中的建议,但没有任何帮助。 有没有人遇到类似/相同的问题并找到解决办法?

  • 画布组件说明 组件 说明 最低版本 canvas 画布 1.0.0 canvas 属性 类型 默认值 必填 说明 最低版本 canvas-id string 否 canvas 组件的唯一标识符,若指定了 type 则无需再指定该属性 disable-scroll string 否 当在 canvas 中移动时且有绑定手势事件时,禁止屏幕滚动以及下拉刷新 bindtouchstart eventha

  • 当FLTK需要重画控件时将调用虚拟函数draw().只有在damage()返回非0值时调用该函数,draw()返回后,damage()被清0。Draw()应该被声明为保护成员函数,避免在不需要写画图代码时用到。 Damage()将包含从最后一次调用draw()后damage(n)调用产生的所有与或位信息,根据该信息只重画需要重画的位置,只有FLTK认为需要全部重画时才打开FL_DAMAGE_ALL

  • 使用后记多年,我现在正在学习SVG。PS有一个功能是我迄今为止无法复制的:零宽度线。在 PS 中,宽度为零的行始终可见:PostScript 将零行宽转换为最小的可打印宽度。在屏幕上,当缩放时,它们永远不会有任何思考,但无论比例如何,它们都可见。当我想渲染非常细的线条时,我已经使用了它们,而不会担心我将要使用的最终分辨率,事实证明它们非常有用。 然而,在官方SVG文档(https://www.w3