【问题标题】:Why all positions/sizes are in double format?为什么所有位置/尺寸都是双格式?
【发布时间】:2013-01-07 08:40:03
【问题描述】:

基本上,我会说坐标是“基于像素的”。 (10,10) 处的像素或宽度为 100 像素的像素很容易理解。

但是因为位置和尺寸是双精度格式,所以你可以有一个 100.6 的尺寸和一个在 (10.1,50.9) 的位置。十进制值对位置/大小有影响吗?

其实我是通过计算点来生成自定义路径的。有些点几乎相等,例如 1.9999999 和 2.000000。起初,我想对所有点进行四舍五入,但我确信 xaml 中的影响(1.99 和 2.00,是同一点吗?)。

【问题讨论】:

    标签: wpf silverlight xaml canvas


    【解决方案1】:

    不,WPF 位置和大小不是基于像素,而是基于“单位”。

    事实上,当您的屏幕设置为 96 dpi 时,1 个单位等于 1 个像素。 但是,例如,如果您将屏幕设置为 120 dpi,则 1 个单位将等于 1.25 像素。

    直接的好处是您的应用程序将比 Windows 窗体应用程序更容易适应更高的分辨率。

    引用FrameworkElement.Height Property

    此值被解释为与设备无关的单位(1/96 英寸)测量值。

    最后,我建议您对值进行四舍五入。不是出于技术原因,而是为了使 XAML 标记更具可读性和“自然性”。

    【讨论】:

    • 好的,那么 10 和 10.5 之间的 xaml 有什么区别吗?它是相同的值吗?也许只有当 dpi 不是 96 dpi 时?
    • 不...这不一样,因为渲染引擎会使用sub pixel rendering来渲染对象。这意味着相邻像素将用于创建这个 10,5 坐标的错觉。要查看差异,请画一条从 10;10 到 10,5;10 的线......您会看到这条线在视觉上不是垂直的
    【解决方案2】:

    WPF 使用矢量图形。有关详细信息,请参阅Visual Rendering Behavior 中的矢量图形部分。矢量图形的一大优势是绘图(例如您的路径)可以轻松缩放而不会出现像素化。

    如果将计算的点值直接放入路径几何体中,则对路径的点进行四舍五入没有多大意义。坐标相对于 Path 对象的原点,并且 Path(或其祖先之一,例如 Canvas)本身可能位于小数像素位置。

    如果将点值写入 XAML,我同意 Steve 的观点,即舍入会使 XAML 更好,您不会意识到 1.99 和 2 之间有任何区别。

    【讨论】:

      猜你喜欢
      • 2022-06-10
      • 2011-02-09
      • 1970-01-01
      • 1970-01-01
      • 2021-09-28
      • 2019-07-23
      • 1970-01-01
      • 1970-01-01
      • 2018-03-09
      相关资源
      最近更新 更多