7

当我设置一个Image来填充窗口时,它似乎渲染在其他控件的顶部,并且通常会使绘制窗口变得一团糟。文件中的顺序似乎没有帮助,但是如果我把它放在它自己的Page部分中,它的表现会好一些

有没有办法在窗口中的所有内容后面显示图像?

此外,其他控件似乎没有正确呈现在它的顶部(文本有白色背景,按钮有白色方块),我猜他们需要在某处设置透明模式?


编辑:

这是问题的一个示例,按钮和复选框从鼠标悬停变得可见,并且文本从选择中变得可见:

问题图片

4

3 回答 3

8

我无法将其Image作为背景工作,但是我能够使用窗口背景获得我想要的东西。

Window允许您使用在 中指定的图像,Theme/@ImageFile然后将Window/@SourceXWindow/@SourceY偏移量指定为 0。但这还不够,因为sWindow引用的字体背景将覆盖窗口图像背景。您需要使用没有指定背景的字体。

<主题 xmlns="http://wixtoolset.org/schemas/thmutil/2010"
     ImageFile="background.png">
    <窗口宽度="485" 高度="300" HexStyle="100a0000"
        FontId="0" SourceX="0" SourceY="0" >#(loc.Caption)</Window>
    <字体 ID="0" 高度="-12" 重量="500"
        Foreground="000000" Background="FFFFFF" >Segoe UI</Font>

我还必须解决另外两个问题:

  • 复选框不服从背景颜色,但这是因为 wixstdba 使用的常见控件,只需要处理它。
  • 进度文本发生了变化,但没有重新绘制背景,所以它会自行绘制,通过给它一个背景来解决问题。

带有背景图像的对话框

于 2013-04-09T14:19:27.457 回答
4

是的,有可能。如果您有一个主题中所有页面都相同的静态图像,那么您可以将Image元素放在所有页面元素之上。或者,如果您希望每页有不同的背景,则将图像放在页面的首位。我像这样组织我的主题:

<Theme>
   <Window />
   <Font /> <!-- as many as necessary -->

   <Image /> <!-- global background image -->

   <Page> <!-- repeat for each page -->
      <Image /> <!-- per-page background image -->
      <other controls />

控制元素的顺序反向定义了 Z 顺序。第一个控件位于底部,从那里向下的控件堆叠在顶部。这就是为什么Image首先需要背景。

至于透明文本,它可能具有不同程度的善意。首先要摆脱白色背景,您需要从用于透明文本Background的元素中删除属性。Font缺少Background属性意味着对文本使用空画笔,它本质上是透明的。

透明度的好坏程度取决于控制。复选框似乎从不尊重透明文本。此外,如果重绘透明文本,它也无法正常工作。您会看到遗留下来的旧文本。因此,透明度仅适用于Text未更新的情况。

无论如何,希望以上内容可以帮助您入门。如果您想为帮助提高透明度或主题做出贡献,我建议您查看src\dutil\thmutil.cpp. 也许你可以让我们弄清楚如何让它完美地工作。

于 2013-04-04T13:29:21.753 回答
4

在尝试为 WIX 设置主题时,我刚刚发现了一个关键字段。

可见=“是”

并不意味着元素可见。这意味着元素始终可见。在每一页上。

于 2013-04-09T08:15:19.543 回答