是否可以在刻录主题中拥有完整的窗口背景图像?

时间:2013-04-04 05:30:27

标签: wix burn

当我设置Image来填充窗口时,它似乎呈现在其他控件的顶部,并且通常会弄乱窗口。文件中的顺序似乎没有帮助,但是如果我把它放在它自己的Page部分中,那么它的行为会更好

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

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


编辑:

以下是问题的示例,鼠标悬停时可以看到按钮和复选框,以及选择的文字:

problem image

3 个答案:

答案 0 :(得分:8)

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

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

<Theme xmlns="http://wixtoolset.org/schemas/thmutil/2010"
    ImageFile="background.png">
    <Window Width="485" Height="300" HexStyle="100a0000"
        FontId="0" SourceX="0" SourceY="0">#(loc.Caption)</Window>
    <Font Id="0" Height="-12" Weight="500"
        Foreground="000000" Background="FFFFFF">Segoe UI</Font>

还有其他两个问题需要解决:

  • 复选框不遵循背景颜色,但这是因为wixstdba使用的常用控件,只需要处理它。
  • 进度文本发生了变化,但没有重新绘制背景,因此它会自行绘制,通过为其提供背景来解决。

dialog with background image

答案 1 :(得分: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中的代码。也许你可以让我们弄清楚如何让它完美运作。

答案 2 :(得分:4)

我在尝试主题WIX时发现了字段。

  

可见= “是”

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